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