Re: [問題] 遞迴改非遞迴

看板Programming作者 (可愛中央處理器)時間15年前 (2010/04/17 16:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/4 (看更多)
改過的版本 => http://codepad.org/ImuTco5T 程式說明: 1. 後面註解有 /* add */ 代表新增的程式碼 2. 被 /* xxx */ 括住的部份是原來的程式碼不需要的部份 3, 除了上面所說的以外,其它都是沿用原來的程式碼 3. 針對你問題一:找不到結束的條件式,相關程式行數 => 18,19,30,43,50 4. 針對你問題二:●無法將map陣列重新放回1,相關程式行數 => 20,30,31,36-38,43-46 ※ 引述《remember11 (紀元)》之銘言: : 如題 : 這是題目的網址 : 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: 220.137.13.233
文章代碼(AID): #1BoNSy1V (Programming)
討論串 (同標題文章)
文章代碼(AID): #1BoNSy1V (Programming)