題目大意:
存在幾個城市1~n;每個城市任意連向其他城市。並且,路程也是不盡相同的。若從乙個城市出發,去各個城市,則去各個城市每乙個城市的最短路程計算出來。
如下是幾個城市的地圖:
題目分析:乙個城市可能有多個路徑,但是尋找最小的路徑卻不容易。
演算法:貪心演算法:從1城市出發,到達4和5城市最小路徑的充分必要條件是
到達前面每乙個城市都是最短路徑
——及貪心演算法中區域性最優解,構成全域性最優解
資料結構:用map這樣的矩陣記錄每個城市的路的大小。dist記錄每個城市的最短路程。p記錄前乙個城市,這樣就能找到全部路線。flag記錄
每個城市是否找到最短的路程。免得重複查詢。
1.初始化部分
void init(int map[max], int dist, int p, bool flag)
}//操作
p[1] = 0;
dist[1] = 0;
map[1][1] = 0;
flag[1] = true;
}將map內全部初始化為極大的數
注意:在這裡先讓1城市帶入了。
2.輸入塊兒
void cinfun(int map[max], int dist, int p, bool flag)
}3.尋找在flag為假中dist的最小的城市。並,找到與他相連的城市。比較相連城市的目前的dist去該城市的dist加上這兩個城市的距離。
若小,則說明走該城市到相連城市是更短的路徑。(核心!!!!)
void minfun(int map[max], int dist, int p, bool flag)
}m--;
while (m--)
//通過dis[k]>dist[x]+map[x][k]時改變該路程
for (int i = 1; i <= n; i++)}}
}flag[min] = true;}}
**如下:
#include
using namespace std;
//資料結構map記錄路線情況,
//dist記錄最短路徑,
//q記錄前驅,
//flag記錄是否為已經是最短路徑
#define max 100
#define maxnum 1000
int map[max][max];
int dist[max], p[max];
bool flag[max];
int n;
int m;
void init(int map[max], int dist, int p, bool flag);
void cinfun(int map[max], int dist, int p, bool flag);
void minfun(int map[max], int dist, int p, bool flag);
int main()
return 0;
}void init(int map[max], int dist, int p, bool flag)
}//操作
p[1] = 0;
dist[1] = 0;
map[1][1] = 0;
flag[1] = true;
}void cinfun(int map[max], int dist, int p, bool flag)
}void minfun(int map[max], int dist, int p, bool flag)
}m--;
while (m--)
//通過dis[k]>dist[x]+map[x][k]時改變該路程
for (int i = 1; i <= n; i++)}}
}flag[min] = true;}}
python貪心演算法最短路徑 貪心演算法《最短路徑》
題目大意 存在幾個城市1 n 每個城市任意連向其他城市。並且,路程也是不盡相同的。若從乙個城市出發,去各個城市,則去各個城市每乙個城市的最短路程計算出來。如下是幾個城市的地圖 題目分析 乙個城市可能有多個路徑,但是尋找最小的路徑卻不容易。演算法 貪心演算法 從1城市出發,到達4和5城市最小路徑的充分...
最短路徑純貪心演算法。
dijkstra演算法,書上其實說的很簡潔,仔細看,仔細思考是會理解的.但要先理解幾條引論和推理.而自己思考的思路在不需要任何推理只從貪心思路出發,和dijkstra有所不同,但本質一樣,那麼自己按照理解,試著慢慢講下.一,問題 從某個源點,到其他各點的最短路徑.注意,不要想成某乙個點,到某個點的最...
貪心演算法 迷宮最短路徑
description 為了測試某種藥物對小白鼠方向感的影響,生物學家在實驗室做了乙個矩形迷宮,入口和出口都確定為唯一的,且分布在矩形的不同邊上。現在讓你算出小白鼠最短需要走多少步,才可以從入口走到出口。input 共n 1 行,第一行為n n 0表示輸入結束 以下n行 n列0 1矩陣,1表示不能通...