设计算法、编写程序找出由右上角的门进入,由左下角的门离开以下迷宫的路...
发布网友
发布时间:2024-10-19 08:48
我来回答
共2个回答
热心网友
时间:2024-12-02 05:20
//走迷宫
//迷宫的布局可能与你的原图有差异,自己可以修改布局,但不要改迷宫的大小尺寸
//程序仅仅是找出一条可通行的路径,没有作找最优路径的选择。
#include <stdio.h>
int a[20][20]; //记录迷宫的布局
int ff[4][2]={1,0,-1,0,0,1,0,-1}; //行走迷宫的四个方向
int place[360][2]; //记录走的步数
int fx=2,fy=19,tx=18,ty=1; //设置起点(2,19),终点(18,1)
int issame(int n){
int i;
for(i=0;i<n;i++)
if(place[n][0]==place[i][0] && place[n][1]==place[i][1])
return 1;
return 0;
}
int nextstep(int n){ //迷宫下一步行走
int i,k;
for(i=0;i<4;i++){
place[n][0]=place[n-1][0]+ff[i][0];
place[n][1]=place[n-1][1]+ff[i][1];
if (place[n][0]>19 || place[n][0]<1) continue; //行越界
if (place[n][1]>19 || place[n][1]<1) continue; //列越界
if (a[place[n][0]][place[n][1]]!=1) continue; //不是1
if (place[n][0]==tx && place[n][1]==ty) return n; //到终点
if (issame(n)==1) continue; //走老路
k=nextstep(n+1);
if (k!=0) return k;
}
return 0;
}
int migong(){ //行走迷宫初始化
place[0][0]=fx;place[0][1]=fy;
return nextstep(1);
}
void printit(){ //显示迷宫
int i,j;
for(i=1;i<=19;i++){
for(j=1;j<=19;j++)
if (a[i][j]==2) printf(" ");
else printf("%2d",a[i][j]);
printf("\n");
}
}
int main(){
char s[20][20]={
"0000000000000000000",
"0111111111111111111",
"0000000001000001000",
"0111110101111101111",
"0001010100000100000",
"0101010101110111111",
"0101000100010000010",
"0111111111110111111",
"0100000000010100000",
"0101111111010101111",
"0101000111010101010",
"0111011111010111010",
"0100010000000100010",
"0101011111110101111",
"0101000000010101011",
"0101010101011101011",
"0101010101000001011",
"1101110111111111010",
"0000000000000000000"
};
int i,j,n;
for(i=1;i<=19;i++)
for(j=1;j<=19;j++)
a[i][j]=s[i-1][j-1]-48;
//显示迷宫
printf("原始迷宫模样\n");
printit();
n=migong();
if (n==0)
printf("没有路径到达\n");
else{
for(i=0;i<=n;i++)
a[place[i][0]][place[i][1]]=2;
printf("走迷宫的路径显示\n");
printit();
}
}
热心网友
时间:2024-12-02 05:12
用A*(A star)算法,可以解决您的问题