zoukankan      html  css  js  c++  java
  • 刷题笔记-图-统计图中多条最短路径

    思路

    1. dijkstra统计最短路径,vector pre[n],记录顶点在最短路径上的前一个顶点(可能有多个),如pre[2]表示起点到顶点2所有最短路径中顶点2的前一个顶点
      如图:pre[3]有两个元素1,4
    2. dfs遍历所有路径

    Code

    #include <iostream>
    #include <vector>
    #include <stack>
    using namespace std;
    const int INF=9999999;
    const int maxn=510;
    int n,cm,sp,vw[maxn],gw[maxn][maxn],dist[maxn],path[maxn],col[maxn];
    vector<int> pre[maxn],temp,minp; //统计所有最短路径-逆序
    int dmin() {
    	int min=INF,mini=-1;
    	for(int i=0; i<=n; i++) {
    		if(col[i]==0 && min>dist[i]) {
    			min=dist[i];
    			mini=i;
    		}
    	}
    	return mini;
    }
    void dijkstra(int c) {
    	// 初始化
    	fill(dist,dist+n+1,INF);
    	fill(path,path+n+1,-1);
    	dist[0]=0;
    	// 取最小值
    	for(int j=0; j<=n; j++) {
    		int min=dmin();
    		col[min]=1;
    		if(min==sp)break; //已找到终点 最短路径
    		for(int i=0; i<=n; i++) {
    			if(gw[min][i]==0||col[i]==1)continue;
    			if(dist[min]+gw[min][i]<dist[i]) {
    				dist[i]=dist[min]+gw[min][i];
    				path[i]=min;
    				pre[i].clear();
    				pre[i].push_back(min);
    			} else if(dist[min]+gw[min][i]==dist[i]) {
    				pre[i].push_back(min);
    			}
    		}
    	}
    }
    void dfs(int e) {
    	if(e==0) {
    		temp.push_back(e);
    		//对每条短路径的处理 
    		for(int i=temp.size()-1;i>=0;i--){
    			//遍历每条最短路径 
    		}
    		temp.pop_back(); 
    		return;
    	}
    	temp.push_back(e);
    	for(int i=0; i<pre[e].size(); i++) {
    		dfs(pre[e][i]);
    	}
    	temp.pop_back();
    }
    int main(int argc,char * argv[]) {
    	int m,a,b;
    	scanf("%d %d",&n,&m);
    	for(int i=0; i<m; i++) {
    		scanf("%d %d",&a,&b);
    		scanf("%d",&gw[a][b]);
    		gw[b][a]=gw[a][b];
    	}
    	dijkstra(0);
    	dfs(sp);
    
    	return 0;
    }
    

  • 相关阅读:
    学习进度条7
    2016年秋季个人阅读计划
    WampServer中MySQL中文乱码解决
    LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”
    人月神话阅读笔记03
    人月神话阅读笔记02
    个人总结
    人月神话阅读笔记01
    学习进度条15
    学习进度14
  • 原文地址:https://www.cnblogs.com/houzm/p/12385319.html
Copyright © 2011-2022 走看看