POJ 3984 bfs
作了一年的ACMer竟然现在才学BFS。。。
好吧,BFS第一题
赤裸裸的裸题
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 int a[10][10]; 6 struct node 7 { 8 int x,y; 9 } que[100]; 10 int pre[100],vis[10][10]; 11 int bfs() 12 { 13 14 int l = 0,r = 1; 15 memset(vis,0,sizeof(vis)); 16 que[0].x = 1;que[0].y = 1; 17 vis[0][0] = 1;pre[0] = -1; 18 while(l<r) 19 { 20 int x = que[l].x,y = que[l].y; 21 for(int i = -1;i<=1;i++) 22 for(int j = -1;j<=1;++j)if((i==0&&j!=0) || (i!=0&&j==0)) 23 { 24 if(a[x+i][y+j]==1||vis[x+i][y+j]||x+i<1||x+i>5||y+j<1||y+j>5)continue; 25 vis[x+i][y+j] = 1; 26 que[r].x = x+i; 27 que[r].y = y+j; 28 pre[r++] = l; 29 if(x+i==5&&y+j==5)return r-1; 30 } 31 l++; 32 } 33 34 return 0; 35 } 36 void print(int x) 37 { 38 if(x==-1)return; 39 print(pre[x]); 40 printf("(%d, %d)\n",que[x].x-1,que[x].y-1); 41 } 42 int main() 43 { 44 // freopen("in.txt","r",stdin); 45 while(~scanf("%d",&a[1][1])) 46 { 47 for(int i = 1;i<=5;++i)for(int j = (i==1?2:1);j<=5;++j) 48 scanf("%d",&a[i][j]); 49 print(bfs()); 50 } 51 return 0; 52 }
弱者究竟为何而战?!