找圖上任意兩點間的某長度\路徑 |
尚未結案
|
spring1201
一般會員 發表:3 回覆:1 積分:0 註冊:2010-05-23 發送簡訊給我 |
小弟是程式新手,最近自學c++一陣子
最近用dev c寫了一個程式,就是給一個圖然後找出任意兩點間某長度所有的路徑 小弟的圖是以一維陣列表示如下: int node[80]={0,1,2,4,8, 1,0,3,7,11, 2,0,3,6,10, 3,1,2,5,9, 4,0,5,6,12, 5,3,4,7,15, 6,2,4,7,14, 7,1,5,6,13, 8,0,9,10,12, 9,3,8,11,15, 10,2,8,11,14, 11,1,9,10,13, 12,4,8,13,14, 13,7,11,12,15, 14,6,10,12,15, 15,5,9,13,14}; 這是一個圖有16個點,0~15,每個點都有4個相鄰點 0,1,2,4,8, 這表示0這點有1,2,4,8,這4個相鄰點 小弟是用暴力法去寫,可能有地方寫錯 所以我的程式只能跑出部分路徑,但一直找不出問題所在 請大大给我指教,或是有什麼比較好的想法,謝謝 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
好久沒寫遞回~
step0中沒有把一找到相鄰點為終點就結束,造成只有最後一個(for迴圈)相鄰點為終點才會結束 (我想這應該不是你想要的結果) step0如下紅字修改,另外step1和mod兩各function完全不需要,直接註解即可 補充,此程式不是找最少節點數路徑,例s=1,d=5,1->0->2->3->5,最少節點路徑1->7->5 void step0(int s,int d,int path[100]){ int i,k,q; k=now(path); for(i=0;i<80;i ){ if(node[i]==s && i%5==0){//找到起點 break; }//找到起點 } //if(node[q]==d){//相鄰點為終點 // output(path);//輸出陣列 //step1(d,q,path);//找下個相鄰點 //break; //} //else{ step0(node[q],d,path);//繼續往下找 break; //n=mod(path[k-1],path[k]); //不需要 path[k]=-1; //step1(d,n,path); //不需要 } } 我的寫法...大同小異,參考看看~ #define MAXPOINT 16 int getpath(int start,int dest,int* path,int& count) { int result = -1; path[count] = start; count ; //檢查該節點連結的節點是否有dest for (int i=1;i<=4;i ) { if (dest == node[start*5 i]) { result = dest; path[count] = dest; count ; return result; } } //以該節點連結的節點繼續尋找 for (int i=1;i<=4;i ) { //檢查是否已走過 bool go_next = false; for (int j=0;j if (node[start*5 i]==path[j]) //重覆path { go_next = true; break; } } if (go_next) continue; //以下不執行,for next //設定走下各節點 if (dest == getpath(node[start*5 i],dest,path,count)) { result = dest; break; } else count--; //若此節點走下去無對應則退回一個path點 } return result; } void __fastcall TForm1::Button1Click(TObject *Sender) { //設定 int start = Edit1->Text.ToInt(); //0~15 int dest = Edit2->Text.ToInt(); //0~15 int *path = new int[MAXPOINT]; for (int i=0;i //開始 int count = 0; if (-1 == getpath(start,dest,path,count)) ShowMessage("找不到路徑"); //show Memo1->Clear(); for (int i=0;i Memo1->Lines->Add(path[i]); } delete path; } |
spring1201
一般會員 發表:3 回覆:1 積分:0 註冊:2010-05-23 發送簡訊給我 |
|
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |