Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 21362 | Accepted: 9926 |
Description
Input
Output
Sample Input
3
8
0 0
7 0
100
0 0
30 50
10
1 1
1 1
Sample Output
5
28
0
BFS。和2243差不多。。要你输出从起点到终点最短的步数
#include<cstdio> #include<iostream> #include<cstring> #include<queue> #include<algorithm> #include<vector> using namespace std; const int N = 305; int n; char color[N][N]; int vist[N][N]; int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2}; int dy[8] = {-1, 1, -2, 2, -2, 2, -1, 1}; int xx; int yy; struct node { int x; int y; int num; }; queue<node>q; node a, b; void bfs() { vist[a.x][a.y]=1; while( !q.empty() ) { node temp = q.front(); if( temp.x==b.x && temp.y==b.y ) { printf("%d\n", temp.num); return ; } q.pop(); for(int i=0; i<8; i++) { xx = temp.x + dx[i]; yy = temp.y + dy[i]; if( xx<0 || xx>=n || yy<0 || yy>=n || vist[xx][yy]) continue; node next; next.x = xx; next.y = yy; next.num=temp.num+1; vist[xx][yy]=1; q.push( next ); } } } int main() { int i,j; int cas; scanf("%d", &cas); while( cas-- ) { scanf("%d", &n); scanf("%d%d%d%d", &a.x, &a.y, &b.x, &b.y); while( !q.empty() ) q.pop(); memset( vist, 0, sizeof(vist) ); node first; first.x = a.x; first.y = a.y; first.num=0; q.push( first ); bfs(); } return 0; }
POJ 1915: Knight Moves,布布扣,bubuko.com
原文:http://blog.csdn.net/u013487051/article/details/37886167