hdu 2544 最短路 解題報告

2022-06-10 15:27:11 字數 3419 閱讀 3914

題目意思:給出 n 個路口和 m 條路,每一條路需要 c 分鐘走過。問從路口 1 到路口 n 需要的最短時間是多少。

這題是最短路的入門題,從理解d-i--j---k(wg自創的,呵呵)到默打到修改,搞左兩日終於好了,哈哈哈~~~太感動了。

第一次錯是 少了dijkstra()函式中的 for (j = 1; j <= n; j++) 。

第二次錯是把vis[k=j]=1 寫在了 if (!vis[j] && dist[j] < mini) 裡面。

好好總結自己的錯誤,以後應該能避免了。(做完鄭多燕後,靈感翻來了,成日系實驗室裡對住堆噁心的實驗報告兼做5成功,有種令人想死的感覺,忽略忽略)

順便幫大家普及下科學知識,經過我的蒐羅,

dijkstra /ˈdɛɪkstra/
別讀成 d  - i - j -k 了

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

#define inf 100000000

8const

int maxn = 100 + 10;9

intdist[maxn], map[maxn][maxn], vis[maxn];

10int

n, m;

1112

void

init()

1323

for (i = 1; i <= m; i++)

2428}29

30void

dijkstra()

3143

}44 vis[k] = 1; //

如果把這句放在上面的if裡面,就會把有些不該被標記已經過的點置1了,實質只需要置距離i點最短的那個點

45for (j = 1; j <= n; j++)

4650}51

}5253int

main()

5461

return0;

62 }

鄰接表 + 優先佇列 + dijkstra (好強大,^_^)

1 #include 2 #include 3 #include 4 #include //

定義各種資料型別最值得常量,如下面的inf_max: 2147483647

5 #include 6

using

namespace

std;78

const

int nv = 100 + 5;9

const

int ne = 2e4 + 5;10

11int

n, m;

1213

struct

dijkstra

1423 node(int v, int

dis): v(v), dis(dis){}

24 friend bool

operator

< (const node a, const

node b)

2528

};29

30struct

edge

3134 edge(int v, int w, int

next): v(v), w(w), next(next) {}

35}e[ne];

3637 inline void init(int

vx)38

4243 inline void insert(int u, int v, int

w)44

4849

/*void print() // 列印每個點的鄰接表

5058

printf("\n");59}

60}61*/

62int dijkstra(int src, int des) //

src: 0 des: n-1

6371 dis[src] = 0

;72 q.push(node(src, 0)); //

把起始點入隊

7374

while (!q.empty())

7590

}91 } //

end for

92 } //

end while

93return

dis[des];

94 } //

end dijkstra

95}g;

9697

intmain()

98109

110 printf("

%d\n

", g.dijkstra(0, n-1

));111

}112

return0;

113 }

spfa + 鄰接矩陣

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;67

const

int inf =1e9;

8const

int maxn = 100 + 5;9

intdist[maxn], map[maxn][maxn];

10bool

mark[maxn];

11int

n, m;

1213

intspfa()

1420 queueq;

21 dist[1] = 0

;22 mark[1] = true

;23 q.push(1

);24

25while (!q.empty())

2640 dist[i] = dist[first] +map[first][i];

41//

mark[i] = true;42}

43}44}

45return

dist[n];46}

4748

intmain()

4959

while (m--)

6064 printf("

%d\n

", spfa());65}

66return0;

67 }

順便寫寫:1874

scanf("%d%d", &st, &en);    // st:起點  en:終點

for (int i = 0; i < n; i++)

輸出注意下即可:printf("%d\n", dist[en] == inf ? -1 : dist[en]);

HDU 2544 最短路 最短路

最近複習了最短路徑的演算法,就寫了4個版本的測試。正好是模板題,就果斷a之。dijkstar版本 include include include include include include includeusing namespace std define n 110 define max 99...

hdu 2544 最短路(最短路)

time limit1000 ms memory limit32768 kb 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input輸入...

HDU2544最短路(最短路徑)

description 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 1...