蠻力法解決城市最短路徑問題

2021-10-06 19:17:45 字數 1233 閱讀 7697

某旅行者希望外出旅遊,他羅列了需要旅遊的所有城市以及城市之間的旅行距離。現他希望能夠將所有這些城市旅行一遍然後回到初始出發的城市,同時希望旅遊中所行駛的總的距離最短。請編寫程式規劃一種旅遊方式以滿足他的要求。

輸入要求:輸入第1行為整數n和m,其中n表示待旅行的城市數量, m表示旅行者出發的城市編號,1≤m≤n。後面的n行,每行有n個整數,分別表示城市之間的距離。

輸出要求:輸出的第1行為乙個整數,表示該旅行者所行駛的最少距離,第2行有n+1個整數,整數之間用空格隔開,表示旅行者旅遊的城市編號,包括起始城市編號以及旅行結束後回到的城市編號。

#include#include#include#includeusing namespace std;

// made by linheng

vectorpath;//用於儲存所有可能的路徑

vectorpathlength;//用於儲存路徑對應的大小

void fullrank(string city, int i)

for (int j = i; j < city.length(); j++)

}//生成全排列

void calculatelength(vector>distance, int m)

if (j == path.at(i).length() - 1)

pathlength.at(i) += distance.at((int)(path.at(i).at(j)) - '0').at((int)(path.at(i).at(j + 1) - '0'));

} }}int main()

}//列出需要排列的城市

fullrank(city, 0);//全排列除出發城市之外的城市

calculatelength(distance, m);//計算每個排列對應的路徑長度

vectorpathlengthcopy(pathlength);//儲存排序前的距離

sort(pathlength.begin(), pathlength.end());//距離排序

cout << pathlength[0] << endl;//輸出最短距離

cout << m << " ";

for (int i = 0; i < path.size(); i++)

break;

} }//輸出最短路徑

cout << m;

return 0;

}

城市平亂(最短路徑)

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 南將軍統領著n個部隊,這n個部隊分別駐紮在n個不同的城市。他在用這n個部隊維護著m個城市的治安,這m個城市分別編號從1到m。現在,小工軍師告訴南將軍,第k號城市發生了 南將軍從各個部隊都派遣了乙個分隊沿最近路去往 城市平亂。現在...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...

A 演算法解決最短路徑問題

常規的尋找最短路徑的演算法有bfs 迪傑斯特拉演算法 但是搜尋範圍過大,比較費時 也可以用最短的貪心演算法來計算,但是在兩點之間有障礙物的情況下,貪心求得的路徑並不是最短路徑 會走到障礙物再被彈回 所有我們 通過把貪心 bfs a 結合進行求最短路。我們需要兩個陣列 open 表示需要被檢驗的點 c...