设为首页 加入收藏

TOP

HDU 3790 最短路径问题(一)
2013-02-08 14:30:19 】 浏览:1257
Tags:HDU  3790  路径 问题

  [cpp]
  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  #define NIL 100000
  struct Node
  {
  int d;  //记录最短路径长度
  int m; //记录最小花费
  int pre; //记录前驱
  int flag; //标记所属集合
  }node[1001];
  /*
  初始化操作,把源点初始化为0,其他正无穷
  @param n 结点个数
  @param s 源点
  */
  int init_shortpath_source(int n, int s)
  {
  int i = 1;
  for(i = 1; i <= n; ++i)
  {
  node[i].d = NIL;  //开始置最短路径为正无穷
  node[i].m = NIL; //最小花费为正无穷
  node[i].flag = 0; //所属 0 集合
  node[i].pre = 0; //前驱为 0
  }
  node[s].d = 0;  //源点最短路径置为 0
  node[s].m = 0;//最小花费置为 0
  return 1;
  }
  /*松弛操作
  *@param u 路径起始点
  *@param v 路径结束点
  *@param gp 路径图
  *@param gm 花费图
  */
  int relax(int u, int v, int** gp, int** gm)
  {
  if(node[v].d > node[u].d + gp[u][v]) //对路径进行松弛
  {
  node[v].d = node[u].d + gp[u][v];
  node[v].m = node[u].m + gm[u][v];
  node[v].pre = u;
  }
  else if(node[v].d == node[u].d + gp[u][v]) //对花费进行松弛
  {
  if(node[v].m >= node[u].m + gm[u][v])
  {
  node[v].d = node[u].d + gp[u][v];
  node[v].m = node[u].m + gm[u][v];
  node[v].pre = u;
  }
  }
  return 1;
  }

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二维数组的建立与文件操作 下一篇单例模式---不仅仅是单例

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目