标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 11189 | Accepted: 6698 |
Description
int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, };
Input
Output
Sample Input
0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0
Sample Output
(0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4)(4, 4)
这个题用数组模拟队列,比直接用队列好。 还有这个题只有一组测试数据,你可以输出一下就过了
有些代码用C++会ce,G++就能过,,,有的是头文件的问题,有的还不知道为毛,只怪自己太菜= =+
2015,8,5
#include<iostream> #include<stdio.h> #include<string.h> #include<queue> using namespace std; int mp[8][8],vis[8][8]; int dre[4][2]={-1,0,1,0,0,-1,0,1}; int front=0,rear=1; struct node{ int x,y,pr; }Q[30]; void print(int k){ if(Q[k].pr!=-1){ print(Q[k].pr); printf("(%d, %d)\n",Q[k].x,Q[k].y); } } void bfs(int x,int y){ memset(Q,0,sizeof(Q)); memset(vis,0,sizeof(vis)); Q[front].x=x; Q[front].y=y; Q[front].pr=-1; while(front<rear){//队非空 for(int i=0;i<4;i++){ int g=Q[front].x+dre[i][0]; int v=Q[front].y+dre[i][1]; if(g>=0&&v>=0&&g<5&&v<5&&!vis[g][v]&&mp[g][v]==0){ vis[g][v]=1; Q[rear].x=g; Q[rear].y=v; Q[rear].pr=front;//前驱 rear++; } if(g==4&&v==4) print(front); } front++;//头指针加一相当于出队,但实际是保存着前驱节点 } } int main(){ int i,j; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",&mp[i][j]); printf("(0, 0)\n"); bfs(0,0); printf("(4, 4)\n"); return 0; }
标签:
原文地址:http://blog.csdn.net/ling_du/article/details/47302009