資源簡介
該程序作用為對于輸入的n*n的迷宮(用1表示障礙,0表示可通行),從入口(1,1)出發,找出一條通往(n,n)的最短路徑,若有多條路徑長度相同 ,則隨機輸出其中一條。
代碼片段和文件信息
/*該程序作用為對于輸入的n*n的迷宮(用1表示障礙,0表示可通行),從入口(11)出發,找出一條通往(nn)的最短路徑,若有多條路徑長度相同?,則隨機輸出其中一條。
例如:若n為5,迷宮為
01101
00001
01011
11001
11100
則輸出為(*表示路徑中的點)?
███████
█**██??██
█******??██
█??█**███
███****██
████****█
███████
*/?
#include
#define?maxnum?10000
int?n;
int?move[4][2]={{01}{10}{-10}{0-1}};//move數組表示可以移動的四個方向?
int?time[51][51];//time數組存放到達某一點的最少時間(假設每走一步所用時間為1);?
char?maze[51][51];//maze數組用于存放迷宮地圖?
struct?xy{
int?xy;
}prestep[51][51];//prestep數組用于記錄到達某一點的前一步的坐標,如prestep[x][y].x里面存放路徑中(xy)的前一個點的橫坐標,
???????????????????????//prestep[x][y].y存放相應的縱坐標。?
void?getmaze(void);
void?search(int?xint?yint?prexint?prey);
int?check(int?xint?y);
void?getpath(int?xint?y);
int?main()
{
int?ij;??
??
????getmaze();
????for(i=1;i<=n;i++)
????????for(j=1;j<=n;j++)
???????? time[i][j]=maxnum;//先將時間都設為最大值?
????search(1100);
????if(prestep[n][n].x==0)
???? printf(“NO?WAY!\n“);//無法走出迷宮?
????else{
???? getpath(nn);
???? system(“chcp?437“);
???? for(i=0;i<=n+1;i++){
???? for(j=0;j<=n+1;j++)
???? if(maze[i][j]==‘1‘)
printf(“%c“219);
else?if(maze[i][j]==‘*‘)
printf(“**“);
else
printf(“??“)?;
???? printf(“\n“);
}
}
????
?}?
?void?getmaze(void)//讀入迷宮地圖?
?{
? int?ij;
? char?c;
?
? printf(“請輸入迷宮大小n:\n
- 上一篇:188協議測試軟件
- 下一篇:555延時電路原理圖
評論
共有 條評論