環路最小路徑問題:就是熟稱的旅行者問題,也叫tsp演算法。
假設有五個城市a,b,c,d,e。如果旅行者從a城市出發,歷經其它各個城市,最終又回到a城市,且其中每個城市只能經過一次。求環路中最短的路徑就是所謂的旅行者問題。我們依舊可以採取dfs的演算法解決該問題。
本題的思路是利用深度搜尋進行窮舉,把所有的路徑都走一次,找到乙個最短的路徑。當然中途可以剪支。
要求輸入,例如:
5
9 9 2 9 5
6 3 5 1 5
1 8 3 3 3
6 0 9 6 8
6 6 9 4 8
第一行表示一共有5個城市,其實形成乙個5×5的鄰接矩陣
後面的2~6行表示每個城市和每個城市的距離,可以理解為有向帶權圖,其中0表示從i城市出發到第j城市是走不通的,即不存在連通性
要求輸出:最小的距離,例如: 18
**部分:
#include
using namespace std;
int answer;
int n;
int array[12][12];
int visit[12];
int result;
//深度搜尋
void dfs(int node)
dfs(i);}}
int j;
for (j = 0; j < n; ++j)
isallvisit = true;
}//如果所有的通路都被走過了,而且從最後乙個節點回到0節點是有通路的,就算出此時的最小距離
if (true == isallvisit && array[node][0])
}//還原走過的節點,為別的還可能存在的路徑做準備
visit[node] = 0;
}int main(int argc, char** argv)
visit[i] = 0;
}//初始化最短距離和最終的結果,假定result開始之前是無窮大,我們用0x7fffff表示
answer = 0;
result = 0x7fffff;
dfs(0);
cout << result << endl;
return 0;
}最後同樣給出幾組測試資料:
5
9 9 2 9 5
6 3 5 1 5
1 8 3 3 3
6 0 9 6 8
6 6 9 4 8
1 2 5 3 1 2 2 3 1 1
2 3 5 4 3 6 3 1 3 2
4 1 3 2 7 4 2 7 2 1
3 6 4 4 3 6 6 6 6 1
3 6 5 2 3 1 3 3 2 1
4 4 4 5 3 5 6 2 7 2
3 5 2 1 4 4 7 5 7 4
1 1 6 1 3 4 6 7 5 2
1 4 5 1 7 5 5 5 2 1
2 4 2 1 1 2 2 3 4 2
0 6 2 8 8 5 8 7 4
9 0 4 3 2 0 5 8 3
4 4 0 1 0 4 5 3 2
4 9 7 0 0 3 8 9 6
8 6 1 5 0 9 3 6 2
7 1 5 4 9 0 6 4 1
0 8 6 5 3 9 0 6 2
5 9 8 2 0 9 3 0 9
9 0 3 2 1 0 3 5 0
0 29 61 43 43 2 67 22 2 19
29 0 7 9 69 63 70 66 37 26
61 7 0 71 8 49 65 57 91 5
43 9 71 0 39 16 13 38 36 69
43 69 8 39 0 61 66 83 27 10
2 63 49 16 61 0 49 38 97 24
67 70 65 13 66 49 0 19 55 21
22 66 57 38 83 38 19 0 49 48
2 37 91 36 27 97 55 49 0 31
19 26 5 69 10 24 21 48 31 0
0 39 55 41 71 92 43 10 95 73
39 0 20 22 75 25 92 12 14 89
55 20 0 91 47 34 21 24 21 4
41 22 91 0 12 45 44 36 45 86
71 75 47 12 0 48 29 19 22 10
92 25 34 45 48 0 34 17 55 14
43 92 21 44 29 34 0 20 36 48
10 12 24 36 19 17 20 0 75 67
95 14 21 45 22 55 36 75 0 96
73 89 4 86 10 14 48 67 96 0
結果分別為:
18 15 23 132 183
矩陣的最小路徑和
準備校招的!這些是一本書的筆記 程式設計師 面試指南 it名企演算法與資料結構題目最優解 左程雲 給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和 舉例 如果給定的m如下 135 9 813 4 506 1 8...
矩陣的最小路徑和
給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和。方法一 遞迴 coding utf 8 defsolution m,l n l m 0 0 if len m 1 and len m 0 1 return l ...
矩陣的最小路徑和
題目 給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後達到右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和。舉例 給定的m如下 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 路徑1,3,1,0,6,1,0是所有路徑中路徑和最小的,所以返回12。...