说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。
解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是递回的基本题,请直接看程式应就可以理解。
#include <stdio.h>
#include <stdlib.h>
int visit(int ,int);
int a[9][9]={{2, 2, 2, 2, 2, 2, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 0, 2, 2, 0, 2, 2, 0, 2},
{2, 0, 2, 0, 0, 2, 0, 0, 2},
{2, 0, 2, 0, 2, 0, 2, 0, 2},
{2, 0, 0, 0, 0, 0, 2, 0, 2},
{2, 2, 0, 2, 2, 0, 2, 2, 2},
{2, 0, 0, 0, 0, 0, 0, 0, 2},
{2, 2, 2, 2, 2, 2, 2, 2, 2}};
int starti=1,startj=1;
int endi=7,endj=7;
int flag=0;
int main()
{
int i,j;
printf("显示迷宫:\n");
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(a[i][j]==2) printf("█");
else printf(" ");
}
printf("\n");
}
if(visit(starti,startj)==0)
printf("there is no way!\n");
else
{
printf("显示路径:\n");
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(a[i][j]==2) printf("█");
else if(a[i][j]==1) printf("◇");
else printf(" ");
}
printf("\n");
}
}
return 0;
}
int visit(int i,int j)
{
a[i][j]=1;
if(i==endi&&j==endj)
flag=1;
if(flag!=1&&a[i+1][j]==0) visit(i+1,j);
if(flag!=1&&a[i][j-1]==0) visit(i,j-1);
if(flag!=1&&a[i-1][j]==0) visit(i-1,j);
if(flag!=1&&a[i][j+1]==0) visit(i,j+1);
if(flag==0)
a[i][j]=0;
return flag;
}
image.png
网友评论