本人新手,关于c++迷宫问题。这里有我的程序。50分!

2025-01-03 05:34:47
推荐回答(2个)
回答(1):

因为不会走重复的格子,所以每个格子只有一个前驱(也就是是从哪个格子到的这个格子)。。。每个格子记录下前驱,在找到了ok的路径后,从终点往前找就可以找到那条从起点过来的路径。。。然后输出

回答(2):

我修改了一下你的代码,实现了路径的输出.
利用一个path二维数组记录路径.你看下应该就会明白.如果不明白就HI我吧.
服了,这样不行么?
稍稍改一下就行了吧.

#include
int x,y,p,q,m,n,i,j,z;
static int a[7][7];
static int path[7][7];

void printpath()
{
int prex= x, prey=y;
for (int i = 0; i< 7; ++i)
for(int j = 0; j < 7; ++j){
if(path[i][j] != 0 && x != i && y!=j){
cout<"< prex = i; prey = j;}
}
cout<}

void fun(int x,int y)
{

if (x==p&&y==q)
{
z++;
printpath();
cout<<"到达终点"< return;
}
else
{
if (a[x][y+1]==1)
{
//cout<"<
y++;
path[x][y-1] = 1;
a[x][y-1]=0;
fun(x,y);
y--;
path[x][y] = 0;
a[x][y]=1;}
if (a[x-1][y]==1)
{//cout<"< x--;
path[x+1][y] = 1;
a[x+1][y]=0;
fun(x,y);
x++;
path[x][y] = 0;
a[x][y]=1;}
if (a[x][y-1]==1)
{//cout<"< y--;
path[x][y+1] = 1;
a[x][y+1]=0;
fun(x,y);
y++;
path[x][y] = 0;
a[x][y]=1;}
if (a[x+1][y]==1)
{//cout<"< x++;
path[x-1][y] = 1;
a[x-1][y]=0;
fun(x,y);
x--;
path[x][y] = 0;
a[x][y]=1;}
}
}

int main()
{
cin>>m>>n;
for (i=1;i<=m;i++)
{
for (j=1;j<=n;j++)
cin>>a[i][j];
}
cin>>x>>y>>p>>q;
path[x][y] = 1;
path[p][q] = 1;
fun(x,y);
cout< cout<
return 0;
}