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
    */
    
  • 相关阅读:
    [转]2013豆瓣校园招聘研发类笔试题
    【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
    [转]2013百度校园招聘-机器学习和数据挖掘工程师-笔试题
    [转]一个应届计算机毕业生的2012求职之路
    图片镜像
    家有学霸的CEO
    盯盯拍Android App 3.0指导
    淘宝领取金币
    儿童散光眼的分类
    女孩被宠坏叫爷爷滚开
  • 原文地址:https://www.cnblogs.com/Nlifea/p/11745921.html
Copyright © 2011-2022 走看看