zoukankan      html  css  js  c++  java
  • 数据结构—dijkstra

    实验七 最短路径

    2018 年 11 月 13 日

    实验内容与要求

    根据输入的图形,输入起点和终点,求出最短路径和最短路径的
    长度。

    具体步骤

    1. 编写一段代码,接收键盘的输入定点的数量,并以输入的整数对作为边来建
      立图形的邻接矩阵(无向权重图) 。
      例如 : 5,6,12
      表示定点 5 和定点 6 间有边,边的权重为 12。
    2. 打印出邻接矩阵。
    3. 输入起点和终点。
    4. 打印最短路径和最短路径的长度
    5. 样例:数据测试

    输入:

    1,3,5
    1,4,30
    2,1,2
    3,2,15
    3,6,7
    5,4,4
    6,4,10
    6,5,18
    打印出计算 1,5 两点之间距离及最短路径

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 1e3 + 50; //代表最多的点的数量 
    const int inf = 0x3f3f3f3f ; // inf 相当于一个很大的数,几乎取不到 
    
    int G[maxn][maxn] ,dis[maxn] ,n ,u ,v ,w ; // G是存图的邻接矩阵 ,dis是起点到当前点的距离,n是点的数量 
    bool vis[maxn] ; //标记当前点有没有被访问过 
    
    void init() {
    	memset(dis ,inf ,sizeof(dis)) ; 
    	// memset函数 用法 :  ad : 
    	//                                     for (int i = 0 ; i <= (dis数组的大小) ; i ++ ) {
    	// memset(dis ,inf ,sizeof(dis))  =        dis[i] = inf;
    	//                                     }
    	//
    	memset(vis ,false ,sizeof(vis));
    	memset(G ,inf ,sizeof(G));
    }
    
    void dijkstra(int st) { // dijkstra 算法参见 :  
                            // https://blog.csdn.net/Acer12138/article/details/79381394
    	dis[st] = 0 ,vis[st] = true ;
    	int pos = st;
    	for (int i = 1 ; i < n ; i ++ ) {
    		for (int j = 1 ; j <= n ; j ++ ) {
    			if ( !vis[j] && dis[pos] + G[pos][j] < dis[j] ) {
    				dis[j] = dis[pos] + G[pos][j];
    			}
    		}
    		int minn = inf ,v ;
    		for (int j = 1 ; j <= n ; j ++ ) {
    			if ( !vis[j] && minn > dis[j]) {
    				v = j;
    				minn = dis[j];
    			}
    		}
    		vis[v] = true;
    		pos = v;
    	}
    }
    
    int main() {
    	init() ; scanf("%d %d",&n,&m) ; // n vertix
    	for (int i = 1 ; i <= m ; i ++ ) {
    		scanf("%d %d %d",&u ,&v ,&w );
    		G[u][v] = G[v][u] = w;
    	}
    	dijkstra(1) ;
    	printf("%d
    ",dis[5] ) ;
    	return 0;
    }
    /*
    6
    1,3,5
    1,4,30
    2,1,2
    3,2,15
    3,6,7
    5,4,4
    6,4,10
    6,5,18
    */
    
  • 相关阅读:
    linux源码方式安装Apache
    linux的chmod,chown命令详解
    2011年10月18日
    mysql检查查询及索引效率方法(explain)
    php中英文字符串的研究
    2011年10月20日
    PHP JSON中文乱码解决方法大全
    解决PHP下载文件名中文乱码
    php字符串学习笔记
    CSU_BMW正式组队纪念赛出题+部分解题报告
  • 原文地址:https://www.cnblogs.com/Nlifea/p/11745921.html
Copyright © 2011-2022 走看看