广度搜索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; }  

posted @ 2013-03-15 23:14  xiaxiaosheng  阅读(149)  评论(0)    收藏  举报