老师在c高级课上说要叫我们做一个走迷宫的游戏,关键还要叫我们设置一个可以自动走完的事例。
int x,y;
char sx[1200],sy[1200];
//之前的最短路径x,y
int i,tx,ty;
a[head+1].x=x;
a[head+1].y=y;
while(head
{
head++;
for(i=0;i<=3;i++)
{
tx=a[head].x+str[i][0];
ty=a[head].y+str[i][1];
if(p[tx][ty]=='G')
//到终点
{
a[end].x=tx;
a[end].y=ty;
strcpy(a[end].sx,a[head].sx);
//复制之前的路径
strcpy(a[end].sy,a[head].sy);
a[end].sx[strlen(a[end].sx)]='0'+tx;
a[end].sy[strlen(a[end].sy)]='0'+ty;
return ;
}
if(p[tx][ty]!='#'&&tx>=0&&tx<=n-1&&ty>=0&&ty<=m-1&&flag[tx][ty]==0)
{
flag[tx][ty]=1;
a[end].x=tx;
a[end].y=ty;
strcpy(a[end].sx,a[head].sx);
//复制之前的路径
strcpy(a[end].sy,a[head].sy);
a[end].sx[strlen(a[end].sx)]='0'+tx;
a[end].sy[strlen(a[end].sy)]='0'+ty;
end++;
}
}
}
int i,j;
scanf("%d%d",&n,&m);
getchar();
for(i=0;i<=n-1;i++)
{
for(j=0;j<=m-1;j++)
{
scanf("%c",&p[i][j]);
if(p[i][j]=='S')
//起点
a1=i,b1=j;
if(p[i][j]=='G')
//终点
a2=i,b2=j;
}
getchar();
}
bfs(a1,b1);
printf("%c %c\n",a1,b1);
for(i=0;i<=strlen(a[end].sx)-1;i++)
//输出到终点是之前的路径
{
printf("%c %c\n",a[end].sx[i],a[end].sy[i]);
}
老师在屏幕上显示了一遍,但那个不是按最短路径走的,有些情况还走不出,我想做一个按最短路径走的。
之前接触过搜索,老师一提出这个问题我就想到了搜索,但是写的时候发现对我这个菜鸟来说不容易。最短路径当然是bfs,但是有发现因为有队列不好记录。于是,没办法只能按烦的办法来,真心希望大神们给点简便的办法。
我的想法是在记录位置的结构体中加一个字符数组,用来记录之前的所有路径。
#include
#include
int a1,b1,a2,b2,n,m,str[4][2]={{-1,0},{1,0},{0,-1},{0,1}},flag[1200][1200];
int head=0,end=2;
char p[1200][1200];
struct
{
}a[1200];
void bfs(int x,int y)
{
}
int main()
{
}