看板 Programming 關於我們 聯絡資訊
如題 這是題目的網址 http://uva.onlinejudge.org/external/2/291.html 這是ACM的競賽題目 (一筆劃問題) 下面的程式碼是老師給的 c語言code 老師要我們把它從"遞迴"改成"非遞迴" 因為小弟才疏學淺+遞迴很少用... 我大概改了兩個版本都失敗 我遇到了兩個問題 ●找不到結束的條件式//要把所有的可能找出來 ●無法將map陣列重新放回1 /* map[now][a]=1; map[a][now]=1; */ 不知道有沒有大大可以指點思考一下方向 //---------------------------------------- #include<stdio.h> #include<stdlib.h> int map[5][5]={ 0,1,1,0,1, 1,0,1,0,1, 1,1,0,1,1, 0,0,1,0,1, 1,1,1,1,0}; int tryway[9]={0}; void make(int now,int go) { int a,b,sum=0; tryway[go]=now; for(a=0;a<5;a++) for(b=0;b<5;b++) sum=sum+map[a][b]; if(sum==0) { for(a=0;a<9;a++) printf("%d",tryway[a]+1); printf("\n"); } for(a=0;a<5;a++) if(map[now][a]==1&&a!=now) { map[now][a]=0; map[a][now]=0; make(a,go+1); map[now][a]=1; map[a][now]=1; } } main() { make(0,0); system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.127.188
yauhh:真的蠻難的.先說第二個,把map陣列重新放回1218.160.213.121 04/12 01:24
yauhh:就是要準備個stack讓挑走的格數暫存又取回..218.160.213.121 04/12 01:25
yauhh:而因為程式是在map矩陣挑走格數又塞回格數,218.160.213.121 04/12 01:29
yauhh:map的狀態不會是主要的終止條件.218.160.213.121 04/12 01:29
yauhh:最後的for迴圈可以取出來做主要的5x5迴圈,218.160.213.121 04/12 01:30
yauhh:迴圈中要挑走map矩陣,挑完的時候印出來,218.160.213.121 04/12 01:32
yauhh:挑過的格數暫存在stack,等做完時取回.218.160.213.121 04/12 01:33
yauhh:真難轉換,好希望能想出系統化的轉換方法.218.160.213.121 04/12 01:34
march20:只好暴力跳出 loop 再重新進入了 XD 66.75.255.220 04/12 04:44
march20:然後全部的變數都放進 stack XD 66.75.255.220 04/12 04:45
brianhsu:用迴圈自己 maintain stack。XD 114.32.42.74 04/12 07:39
cooljony0109:用stack != NULL 當終止條件 163.13.127.179 04/12 14:25
cooljony0109:不知道可不可行!? 163.13.127.179 04/12 14:26