最简单的迷宫

来源:互联网 发布:自建别墅 知乎 编辑:程序博客网 时间:2024/04/30 14:02

#include<stdio.h>
#include<string.h>

#define n 5
#define m 5
struct Node
{
 int x;
 int y;
}a[n*m+1];

int visit[n+1][m+1];

int jiexian(int xx,int yy)
{
 if(xx<0||xx>n-1)
  return 0;
 else if(yy<0||yy>m-1)
  return 0;
 else
     return 1;
}

int bfs(int x1,int y1,int x2,int y2)
{
 int xx;
 int yy;
 memset(visit,0,sizeof(visit));
 int rear=0;
 int front = 0;
 int map[n][m];
 printf("请输入地图\n");
 for(int i=0;i<m;i++)
  for(int j=0;j<n;j++)
   scanf("%d",&map[i][j]);
 a[rear].x=x1;
 a[rear++].y=y1;
 int x_add[4]={0,0,1,-1};
 int y_add[4]={1,-1,0,0};
 while(rear>front)
 {
  if(a[front].x==x2&&a[front].y==y2)
   return 1;
  int x=a[front].x;
  int y=a[front++].y;
  for(int i=0;i<4;i++)
  {
   xx=x+x_add[i];
   yy=y+y_add[i];
   if(map[xx][yy]==1&&visit[xx][yy]==0&&jiexian(xx,yy))
   {
    visit[xx][yy]=1;
    a[rear].x=xx;
    a[rear++].y=yy;
   }
  }
 }
 return 0;
}
int main()
{
 int x2,y2;
 int  x1,y1;
 printf("请输入入口\n");
 scanf("%d%d",&x1,&y1);
 printf("请输入出口\n");
 scanf("%d%d",&x2,&y2);
 int ans=bfs(x1,y1,x2,y2);
 if(ans)
  printf("OK");
    else
  printf("NO");
 return 0;
}

原创粉丝点击