当前位置: 首页 >> 程序设计 >> 数据结构和算法 >> 单源最短路径bellman-ford算法
 

单源最短路径bellman-ford算法

作者:ningboweimin      来源:http://blog.csdn.net/ningboweimin     发表时间:2006-11-08     浏览次数:      字号:    

求的是arc数组中存储的第一个顶点到其他顶点的最短路径,结果存在dis数组中。

#i nclude <stdio.h>
#i nclude <malloc.h>

#define MAX 100
#define MAXNUM 10000000

typedef struct graphnode
{
 int vexnum;
 int arcnum;
 int gra[MAX][MAX];
}Graph;

int dis[MAX];
int arc[MAX][MAX];

void bellman(Graph *g);

int main()
{
 int i,j;
 Graph *G;
 G=(Graph *)malloc(sizeof(Graph));
 printf("vexnum:\n");
 scanf("%d",&G->vexnum);
 printf("arcnum:\n");
 scanf("%d",&G->arcnum);
 printf("graph:\n");
 for(i=0;i<G->vexnum;i++)
  for(j=0;j<G->vexnum;j++)
   scanf("%d",&G->gra[i][j]);
 for(i=0;i<G->arcnum;i++)
 {
  printf("the %dth arc:\n");
  scanf("%d%d",&arc[i][0],&arc[i][1]);
 }
 bellman(G);
 return 0;
}


void bellman(Graph *G)
{
 int i,j;
 bool sign;
 for(i=0;i<G->vexnum;i++)
  dis[i]=MAXNUM;
 dis[1]=0;
 sign=true;
 for(i=1;i<G->vexnum;i++)
 {
  sign=false;
  for(j=0;j<G->arcnum;j++)
  {
   if(dis[arc[j][0]]<MAXNUM && dis[arc[j][1]]>dis[arc[j][0]]+G->gra[arc[j][0]][arc[j][1]])
   {
    dis[arc[j][1]]=dis[arc[j][0]]+G->gra[arc[j][0]][arc[j][1]];
    sign=true;
   }
  }
 }
 return;
}

责任编辑 webmaster

 
 
 
 
 
评论更多>>
 
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •