zoukankan      html  css  js  c++  java
  • Bellman_Ford算法(负环的单源路径)

    主要思想

    • 一张图和一个源点,当最短路径确定时,这个图的最短路径树一定是确定的。且深度不超过V(<=V)
    • 但是 如果超过V层还可以松弛(说明出现了负环)

    注意点

    • 初始化,比如vis数组的false 最小路径的INF
    • 将源点的d[s]=0

    代码

    #include<vector>
    using namespace std;
    const int max_n = 30;
    const int INF = 0x3fffffff;
    //Bellman_Ford算法
    //一张图和一个源点,当最短路径确定时,这个图的最短路径树一定是确定的。且深度不超过V(<=V)
    //但是 如果超过V层还可以松弛(说明出现了负环)
    struct  node
    {
    	int v;
    	int wight;
    };
    int n;//顶点个数
    vector<node>Adj[max_n];
    int d[max_n];//距离源点的最短路径
    bool Bell_Ford(int s)//源点
    {
    	//初始化
    	fill(d, d + n, INF);
    	//得到最短路径树/最短路径d
    	d[s] = 0;
    	for (int i = 0; i < n - 1; i++)//松弛v-1轮 每一轮确定一层 最多V-1层
    	{
    		for (int j = 0; j < n; j++)
    		{
    			for (int x = 0; x < Adj[j].size(); x++)//每一条边
    			{
    				int v = Adj[j][x].v;
    				int weight = Adj[j][x].wight;//j和v的距离
    				if (d[v] < d[j] + weight)
    					d[v] = d[j] + weight;
    			}
    		}
    	}
    	//判断有没有负环
    	for (int j = 0; j < n; j++)
    	{
    		for (int x = 0; x < Adj[j].size(); x++)//每一条边
    		{
    			int v = Adj[j][x].v;
    			int weight = Adj[j][x].wight;//j和v的距离
    			if (d[v] < d[j] + weight)
    				return false;
    		}
    	}
    	return true;
    }
    
  • 相关阅读:
    字符串的不可变性--转载
    this的作用--转载
    构造函数
    根基决定一个程序员会不会被淘汰 --转载
    BAT-使用BAT方法清理Delphi临时文件
    键盘,鼠标,文件
    画布.画笔.画刷
    Delphi外挂开发网站
    教程-经典Delphi教程网
    教程-Delphi各版本与工具下载地址
  • 原文地址:https://www.cnblogs.com/code-fun/p/15234113.html
Copyright © 2011-2022 走看看