Re: [問題] 遞迴改非遞迴
改過的版本 => 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
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章