Poj 2387 Til the Cows Come Home (dijkstra + 判重)
2018-01-23 20:11
225 查看
题意:给你一个无向图,让你求1到n的最短距离。
题解:题目描述的很清楚,但是这道题有点小坑,就是两个点之间会有多条边。对于多条边,我们存最小的即可了。然后裸的一个dijkstra就可以了。详情看代码注解
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 2005; //点的个数
const int inf = 1e9;
int map[maxn][maxn]; // 邻接矩阵
int n,m;
void dijkstra(){
int minn ,v;
int dis[maxn];
bool vis[maxn];
for(int i = 1 ; i <= n ; i++){ // 初始化
vis[i] = 0;
dis[i] = map[1][i];
}
for(int i = 1; i <= n ; i++ ){
minn = inf;
for(int j = 1;j <= n ; j ++){ // 找出最短边
if(!vis[j] && dis[j] < minn){
v = j;
minn = dis[j];
}
}
vis[v] = 1;
for(int j = 1; j <= n ; j ++) // 松弛
if(!vis[j] && dis[j] > dis[v] + map[v][j])
dis[j] = dis[v] + map[v][j];
}
cout << dis
<< endl;
}
int main(){
while(~scanf("%d%d",&m,&n)){ //初始化
for(int i = 1; i <= n ; i++)
for(int j = 1;j <= n ; j ++)
if(i == j)
map[i][j] = 0;
else
map[i][j] = map[j][i] = inf;
int u,v,w;
for(int i = 1; i <= m ; i++){ //读入边
cin >> u >> v >> w;
if(map[u][v] > w) // 判重
map[u][v] = map[v][u] = w;
}
dijkstra();
}
return 0;
}
题解:题目描述的很清楚,但是这道题有点小坑,就是两个点之间会有多条边。对于多条边,我们存最小的即可了。然后裸的一个dijkstra就可以了。详情看代码注解
#include<cstring>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 2005; //点的个数
const int inf = 1e9;
int map[maxn][maxn]; // 邻接矩阵
int n,m;
void dijkstra(){
int minn ,v;
int dis[maxn];
bool vis[maxn];
for(int i = 1 ; i <= n ; i++){ // 初始化
vis[i] = 0;
dis[i] = map[1][i];
}
for(int i = 1; i <= n ; i++ ){
minn = inf;
for(int j = 1;j <= n ; j ++){ // 找出最短边
if(!vis[j] && dis[j] < minn){
v = j;
minn = dis[j];
}
}
vis[v] = 1;
for(int j = 1; j <= n ; j ++) // 松弛
if(!vis[j] && dis[j] > dis[v] + map[v][j])
dis[j] = dis[v] + map[v][j];
}
cout << dis
<< endl;
}
int main(){
while(~scanf("%d%d",&m,&n)){ //初始化
for(int i = 1; i <= n ; i++)
for(int j = 1;j <= n ; j ++)
if(i == j)
map[i][j] = 0;
else
map[i][j] = map[j][i] = inf;
int u,v,w;
for(int i = 1; i <= m ; i++){ //读入边
cin >> u >> v >> w;
if(map[u][v] > w) // 判重
map[u][v] = map[v][u] = w;
}
dijkstra();
}
return 0;
}
相关文章推荐
- poj 2387 Til the Cows Come Home dijkstra
- poj-2387-Til the Cows Come Home(Dijkstra优先队列实现)
- POJ 2387 Til the Cows Come Home(Dijkstra简单题)
- POJ - 2387----Til the Cows Come Home(Dijkstra)
- POJ - 2387 Til the Cows Come Home——dijkstra
- poj 2387 Til the Cows Come Home (最短路,dijkstra模版题)
- POJ 2387 Til the Cows Come Home (最短路 dijkstra)
- POJ 2387 Til the Cows Come Home (Dijkstra)
- POJ 2387 Til the Cows Come Home (最短路+Dijkstra)
- poj2387 Til the Cows Come Home(Dijkstra)
- POJ 2387 Til the Cows Come Home(Dijkstra)
- POJ 2387 Til the Cows Come Home - (Dijkstra)
- POJ 2387-Til the Cows Come Home(Dijkstra+堆优化)
- POJ 2387 Til the Cows Come Home(Dijkstra)
- 怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
- POJ 2387 Til the Cows Come Home(Dijkstra)
- POJ 2387 || Til the Cows Come Home(最短路,dijkstra
- 2387 poj Til the Cows Come Home【dijkstra,经典&&基础】
- POJ 2387 Til the Cows Come Home(最短路dijkstra)
- POJ 2387-Til the Cows Come Home(最短路Dijkstra+优先队列)