广度搜索BFS迷宫
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { int xx,yy; struct node *next; }*Linklist , LNode ;
int map[1000][1000];
typedef struct { Linklist front ; Linklist rear ; } *Queue ,queue; void push (Queue q,int m,int n) { Linklist p; p=new LNode; p->xx=m; p->yy=n; p->next=NULL; if(q->front==NULL) { q->front=p; q->rear=p; return ; } q->rear->next=p; q->rear=p; }
int xxx[4]={1,0,-1,0}; int yyy[4]={0,1,0,-1};
int bfs(int x,int y,int _x,int _y,int _m,int _n) { int visit[x][y]; memset(visit,0,sizeof(visit)); visit[_x][_y]=1; Queue Q; Q = new queue; Q->front = Q->rear = NULL ; push(Q,_x,_y); while(Q->front != NULL) { for(int i=0;i<4;i++) { int x_x=Q->front->xx+xxx[i]; int y_y=Q->front->yy+yyy[i]; if(x_x<0||y_y<0||x_x>x||y_y>y) continue ; if(x_x==_m&&y_y==_n&&map[x_x][y_y]==1) return 1; if(map[x_x][y_y]==1&&visit[x_x][y_y]==0) { push(Q,x_x,y_y); } visit[x_x][y_y]=1; } Q->front=Q->front->next; } return 0; } int main() { int x,y; scanf("%d%d",&x,&y); for(int i=0;i<x;++i) for(int j=0;j<y;++j) scanf("%d",&map[i][j]); int inx,iny,outx,outy; while(1) { printf("请按顺序输入迷宫入口跟出口:\n"); scanf("%d%d%d%d",&inx,&iny,&outx,&outy); int ans = bfs(x,y,inx,iny,outx,outy); printf("%d\n",ans); } return 0; }

浙公网安备 33010602011771号