題目意思:給出 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 5using
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 5using
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...