C語言設計的迷宮問題 哪裡出錯了?
5
問題有三個:
1.手動輸入迷宮後,總是輸出沒有路徑,而且數組也無法正常輸出。自動生成迷宮是正常的。
2.最後“Would you want to try again? 1or0”,無論輸入1或是0,程序都會循環無法停止。
3.我是用“.”表示的路徑,怎樣將最後的路徑用連線連起來?在vc環境下。
望各位高手不吝賜教,先謝謝了。
#include<iostream>
#include<stdlib.h>
#include<time.h>
int main()
{ int d=1;
while(d==1)
{
//設定m=10
const int m=10;
//數組的形式表示八個方向
int move[8][2]={{0,1},{1,1},{1,0},
{1,-1},{0,-1},{-1,-1},{-1, 0},{-1, 1}};
//用結構體表示位置
struct position
{
int x,y;
};
//用於記錄和輸出迷宮探路中相關符號,包括1 .
char maze[m+2][m+2];
//用棧來存儲探路過程中的數據
position stack[m*m+1];
int top;//棧頂
int i,x,y,ok,c,d;
position p;
//二維數組的第0行、第m+1行、第0列、第m+1列元素全
//置成"1",表示迷宮的邊界;第1行第1列元素和第m行第m列
//元素置成"0",表示迷宮的入口和出口;其余元素值用隨機
//函數產生。
srand(time(0));
printf("Would you like to input the maze by youself?\n1 or 0?");
scanf("%d",&c);
if(c==1)
{printf("Enter the %d * %d maze:\n",m,m); /*手動輸入*/
for (x=1; x<=m; x++)
for(y=1; y<=m; y++)
{
scanf("%d",&maze[x][y]);
}
}
else
{printf("The maze is created by the computer:\n");
for(x=1;x<=m;x++)
for(y=1;y<=m;y++)
maze[x][y]=48+rand()%2;
}
maze[1][1]='0';maze[m][m]='0';
for(x=0;x<=m+1;x++)
{
maze[x][0]='1';maze[x][m+1]='1';
}
for(y=0;y<=m+1;y++)
{
maze[0][y]='1';maze[m+1][y]='1';
}
p.x=1;p.y=1;
top=1;stack[top]=p;
maze[1][1]='.';
//開始探路
//走迷宮的過程可以模擬為一個搜索的過程:每到一
//處,總讓它按東、東南、南、西南、西、西北、北、東北
//個方向順序試探下一個位置;如果某方向可以通過,並且不
//曾到達,則前進一步,在新位置上繼續進行搜索;如果個
//方向都走不通或曾經到達過,則退回一步,在原來的位置上
//繼續試探下一位置。
// 每前進或後退一步,都要進行判斷:若前進到了出
//口處,則說明找到了一條通路;若退回到了入口處,則說明
//不存在通路。
do{
p=stack[top];
ok=0;i=0;
while((ok==0)&&(i<8))
{
x=p.x+move[i][0];
y=p.y+move[i][1];
if(maze[x][y]=='0')
{
p.x=x;p.y=y;
stack[++top]=p;
maze[x][y]='.';
ok=1;
}
i++;
}
if(i==8)
{
maze[p.x][p.y]='*';
top--;
}
}while((top>0)&&((p.x!=m)||(p.y!=m)));
//輸出探路結果
if(top==0) printf("沒有路徑\n");
else printf("有路徑\n");
//輸出探路迷宮留下的蹤跡
for(x=1;x<=m;x++)
{
printf("\n");
for(y=1;y<=m;y++)
printf("%c ",maze[x][y]);
}
printf("\n");
printf("Would you like to try again?\n1 or 0?");
scanf("%d",&d);
}
system("pause");
}
最佳回答:
“Would you want to try again? 1or0”,肯定在一個循環裡邊而且肯定打0後沒有改變循環條件。。。蒙的