程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> C語言設計的迷宮問題 哪裡出錯了?

C語言設計的迷宮問題 哪裡出錯了?

編輯:C語言問答

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後沒有改變循環條件。。。蒙的
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved