貪心演算法《最短路徑》

2022-05-15 01:42:35 字數 1896 閱讀 4422

題目大意:

存在幾個城市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表示不能通...