#include<iostream> using namespace std; int count = 0; int chess[6][6]={0}; intnotDanger(int row,int col ){ int i,k; for(i=0;i<6;i++){ if(chess[i][col]==1) return0; } for(i=row,k=col;i>=0&&k>=0;i--,k--) if(chess[i][k]==1) return0;
#include<stdio.h> #include<queue> using namespace std; int dx[4]= {1, 2, 1, 2}; int dy[4]= {2, 1, -2, -1};//四种走法 int ways=0;//记录路线条数
structNODE { int x, y; };//记录路线上的点的坐标
boolValid(NODE h, int m, int n) { if ((h.x<=m)&&(h.y>=1)&&(h.y)<=n) return1; else return0; }//判断下的这步棋是否符合规则
boolbfs(NODE s, int m, int n) { queue<NODE>q;//建立路线队列 NODE now, next;//用于记录当前棋和进入下一步的棋 q.push(s);//起点入列 while (!q.empty()) { now = q.front(); q.pop();//取出当前棋子并出列 if ((now.x==m)&&(now.y==n)) { ways++; continue; }//判断是否走到终点 for ( int i=0; i<4; i++) { next.x=now.x+dx[i]; next.y=now.y+dy[i];//走出四种走法 if (Valid(next,m, n)) q.push(next);//如果有效则入列 } } }
intmain() { int m, n; scanf ("%d %d", &m, &n); NODE s; s= {1,1};//起点 bfs (s, n, m);//开始搜索 printf ("%d\n", ways); return0; }
题解:只要边输入边看这个方向是不是朝着终点。如果是,就动。否则就不动。
D:奇怪的电梯
题目描述:
呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i 层楼(1≤i≤N)上有一个数字 K(0≤Ki≤N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3, 3 ,1 ,2 ,5 代表了 Ki (K1=3,K2=3,…),从 11 楼开始。在 1 楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有-2 楼。那么,从 A 楼到 B 楼至少要按几次按钮呢?