26991: 带负权的单源最短路

原创 2015年07月10日 09:46:27
题目描述

 输入一个有向网络图,边的权值可正可负,求顶点到其他各点的最短路。


输入

第一行输入n,表示n个结点(默认顶点为0号)

接下来输入n*n矩阵。表示各边的权值。


输出

输出一行,如果有负权回路输出“not possible”,否则输出顶点0到其他点的最短路,输出答案之间仅有一个空格,结尾没有空格。


样例输入
4
0 0 -3 0
2 0 0 0
0 -1 0 -4
0 0 0 0

样例输出
not possible

program p26991;
var
 w:array[0..1000,0..1000]of longint;
 dist:array[0..1000]of longint;
 n,x,i,j,k:longint;
 change:boolean;
begin

 readln(n);
 for i:=0 to n-1 do
  for j:=0 to n-1 do
   begin
    read(x);
    if (x=0)and(i<>j)then w[i,j]:=maxint else w[i,j]:=x;
   end;
 for i:=1 to n do
  if w[i,j]=maxint then dist[i]:=maxint else dist[i]:=w[0,i];
  dist[0]:=0;
  for k:=0 to n-1 do
   for j:=0 to n-1 do
    for i:=0 to n-1 do
     if (w[i,j]<>maxint)and(dist[i]<>maxint)and(dist[j]>dist[i]+w[i,j])
     then
      dist[j]:=dist[i]+w[i,j];
 change:=true;

 for i:=0 to n-1 do
  for j:=0 to n-1 do
   if dist[j]>dist[i]+w[i,j]
   then change:=false;
 if not change then
   writeln('not possible')
  else
   for i:=1 to n-2 do
    write(dist[i],' ');
 if change then
    writeln(dist[n-1]);

end.

版权声明:本文为博主原创文章,未经博主允许不得转载。

带负权图的单源最短路径算法:Bellman-Ford算法

前面介绍过图的单源最短路径算法Dijks
  • zhangyalin1992
  • zhangyalin1992
  • 2014年05月31日 16:58
  • 2093

spfa 有无负权环 负权边最短路 模板

spfa 是利用队列优化的快速bellman-ford的算法,可以判断是否有负权环,如果没有的话可以求出来最短路。...
  • cFarmerReally
  • cFarmerReally
  • 2016年10月21日 15:37
  • 440

最短路径(三)—Bellman-Ford算法(解决负权边)

前两节我们写了Floyd-Warshall算法http://blog.csdn.net/wtyvhreal/article/details/43315705和 Dijkstra算法http://bl...
  • wtyvhreal
  • wtyvhreal
  • 2015年02月03日 15:45
  • 4046

SPFA 求带负权的单源最短路

int spfa_bfs(int s) { ///s表示起点; queue q; memset(d,0x3f,sizeof(d)); ///d数组中存下的就是最短路径(存在的...
  • u013382399
  • u013382399
  • 2015年03月12日 20:48
  • 642

关于普通dij算法为什么不能解决负权边的分析

我们首先来分析下含负权边的无向图: 1.先看图 我们求A点到C点的最短距离,很明显答案为1. 2.我们用dij来跑下,看过程: 先把A点标记哈,不需要访问本身 首先找到距A最近的且直接相连的...
  • baidu_31818237
  • baidu_31818237
  • 2016年01月30日 16:01
  • 1333

POJ 3259 Wormholes (寻找负权回路)

题目大意:有n个点m条双向路,w条单向路,输入的数据中前两个表示两点之间有路,前m条路表示这条路所花费的时间,后w条单向路表示可以回到过去某个时间,现在问你从某个点走之后是否会看到自己还没出发时的样子...
  • FJUT_ACM_cjt152
  • FJUT_ACM_cjt152
  • 2016年11月05日 15:41
  • 162

SPFA 最短路 带负权边的---- 粗了解

SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算。 算法大致流程是用一个队列来进行维护。 初始时将源加...
  • WR_technology
  • WR_technology
  • 2016年04月26日 21:28
  • 1646

bellman-ford算法——最短路问题,判断是否存在负权回路或正权回路

转载链接:http://www.wutianqi.com/?p=1912 Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,...
  • ZQUSwansea
  • ZQUSwansea
  • 2015年11月09日 10:37
  • 1096

hdu 3790 最短路径问题(多权值的最短路)

#include #include #include using namespace std; const int inf=100000000; struct In { int x, y; }...
  • u013365671
  • u013365671
  • 2014年08月13日 19:55
  • 548

dijkstra算法为什么不解决负权边

原因我想给一组数据就OK了 1 3 -5 1 2 -3 2 4 -4 3 4  1
  • xky140610205
  • xky140610205
  • 2016年09月24日 15:54
  • 976
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:26991: 带负权的单源最短路
举报原因:
原因补充:

(最多只允许输入30个字)