[問題] 找兩點間所有路徑(使用遞迴)

看板C_and_CPP (C/C++)作者 (淺淺藍)時間16年前 (2010/05/27 20:04), 編輯推噓3(3013)
留言16則, 6人參與, 最新討論串1/1
程式碼:http://nopaste.csie.org/3cb98 我用暴力法(使用遞迴)寫一個找兩點間所有路徑的程式 剛開始用dev c跑16個點時都沒錯 但是跑20個點沒跑完程式就關掉了 之後用visual c++去跑 才知道是stack overflow的問題 請問我該怎解決? void dfs1(int s,int d,int stack_index,int visit_index){ while(visit_index<SIZE){ if(map[s][visit_index]==1 && visit[visit_index]!=-1){//鄰點且沒走過 stack[stack_index]=visit_index;//加入 stack_index=stack_index+1; visit[visit_index]=-1;//標記走過 if(visit_index==d){ output(stack_index); visit[visit_index]=0; stack_index=stack_index-1; //cout<<stack_index; } else{ dfs1(visit_index,d,stack_index,0);//找鄰點 break; } } visit_index++; } if(visit_index==SIZE){ stack_index=stack_index-1; visit[s]=0; if(stack_index!=0){ dfs1(stack[stack_index-1],d,stack_index,s+1); //break; } } } 請問找兩點間所有路徑的方法 有辦法用非遞迴方式嘛? 因為我只想到這個方式而已... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.206.48 ※ 編輯: pkpkgod 來自: 114.44.206.48 (05/27 20:05)

05/27 20:07, , 1F
stack overflow
05/27 20:07, 1F

05/27 20:30, , 2F
簡單的解法是想辦法設定、增加 Visual C++ 的 stack size
05/27 20:30, 2F

05/27 20:45, , 3F
請問是把陣列的長度增加嗎?
05/27 20:45, 3F

05/27 20:46, , 4F
我把stack這個陣列長度變大,結果還是一樣...
05/27 20:46, 4F

05/27 20:51, , 5F
不是這個意思 orz
05/27 20:51, 5F

05/27 20:54, , 6F
阿..是喔 >_< 那是請問設定、增加size是指什麼?
05/27 20:54, 6F

05/27 20:55, , 7F
05/27 20:55, 7F

05/27 21:05, , 8F
可參考:http://tinyurl.com/3ao785v (pixnet相簿)
05/27 21:05, 8F

05/27 21:05, , 9F
4096不夠的話就加倍 仍然不夠再加倍 試試看吧 XD
05/27 21:05, 9F

05/27 21:16, , 10F
好 我試試看 謝謝^^
05/27 21:16, 10F

05/27 21:39, , 11F
j大真的是很有心!
05/27 21:39, 11F

05/27 21:50, , 12F
我試了 還是不行> < 但還是謝謝j大
05/27 21:50, 12F

05/27 21:51, , 13F
另外想請問我的dfs1這個FUNCTION邏輯是否有錯?
05/27 21:51, 13F
※ 編輯: pkpkgod 來自: 114.44.206.48 (05/27 21:55)

05/27 21:53, , 14F
不然就改演算法 或是自己malloc+迴圈取代遞迴吧.
05/27 21:53, 14F

05/27 21:55, , 15F
手動模擬stack
05/27 21:55, 15F

05/30 21:06, , 16F
有確定20點的map是對稱的嗎?..連結裡只有16點
05/30 21:06, 16F
文章代碼(AID): #1B_b_RX_ (C_and_CPP)
文章代碼(AID): #1B_b_RX_ (C_and_CPP)