HDU 2544 bellman-ford
#include "iostream"
#include "stdio.h"
#include "vector"
#include "string.h"
#include "algorithm"
using namespace std;
int n , m;
int u[10005] , w[10005] , v[10005];
int dis[10005];
//u[i]到w[i]的距离为1005
int main()
{
while(scanf("%d %d" , &n ,&m))
{
memset(u , 0 , sizeof(u));
memset(v , 0 , sizeof(v));
memset(w , 0 , sizeof(w));
memset(dis , 0 , sizeof(dis));
if(n == 0 && m == 0)
break;
for(int i = 1 ; i <= m ; i ++)
{
scanf("%d %d %d" , &u[i] , &v[i] , &w[i] );
}
//初始化
for(int i = 0 ; i < 10000 ; i++)
dis[i] = 99999999;
dis[1] = 0;
for(int k = 1 ; k <= n -1 ; k++)
{
for(int i = 1 ; i <= m ; i ++)
{
if(dis[v[i]] > dis[u[i]] + w[i])
dis[v[i]] = dis[u[i]] + w[i];
}
}
//还可以松弛说明有负环
int f = 0;
for(int i = 1 ; i <= m ; i ++)
{
if(dis[v[i]] > dis[u[i]] + w[i])
f = 1;
}
if(f == 1)
printf("-1\n");
else
{
for(int i = 1 ; i <= n ; i ++)
printf("%d ",dis[i]);
}
}
return 0;
}
/*
5 5
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
*/
floyd hdu2544
#include "iostream"
#include "stdio.h"
#include "vector"
#include "string.h"
#include "algorithm"
using namespace std;
int n , m;
int map[105][105];
int u , v , w;
int main()
{
while(scanf("%d %d" , &n ,&m))
{
memset(map , 0, sizeof(map));
if(n == 0 && m == 0)
break;
//初始化图
for(int i = 0 ; i <= n; i ++)
for(int j = 0 ; j <= n ; j ++)
if(i != j)
map[i][j] = 999999;
else
map[i][j] = 0;
for(int i = 1 ; i <= m ; i ++)
{
scanf("%d %d %d" , &u , &v, &w );
if(w < map[u][v])
{
map[u][v] = w;
map[v][u] = w;
}
}
for(int k = 1 ; k <= n ; k ++)
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= n ; j ++)
if(map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
// for(int i = 1 ; i <= n ; i++)
cout << map[1][n] << "\n";
}
}
/*
5 5
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
0 -3 -1 2 4
*/