• POJ


    题意:

    有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离

    分析:

    典型的模板题,但是一定要注意有重边,因此需要对输入数据加以判断,保存较短的边,这样才能正确使用模板。

    题解

    #include<iostream>
    #include<Queue> 
    #include<cstdio>
    #include<vector>
    #include<string.h> 
    using namespace std;
    #define maxn 2001
    #define inf 0x3f3f3f
    int map[maxn][maxn];
    int dist[maxn];
    bool visited[maxn];
    typedef pair<int,int> P;
    void dijkstra(int s,int n){
    	priority_queue<P,vector<P>,greater<P> > Q;
    	memset(visited,0,sizeof(visited));
    	for(int i=1;i<=n;i++){
    		dist[i]=inf;
    	}
    	dist[s]=0;
    	Q.push(P(0,s));
    	
    	while(!Q.empty()){	
    		int v=Q.top().second;
    		Q.pop();
    		if(visited[v]) continue;
    		visited[v]=true;
    		for(int i=1;i<=n;i++){
    			int len=dist[v]+map[v][i];
    			if(dist[i]>len){
    				dist[i]=len;
    				Q.push(P(len,i));
    			}
    		}
    	}	
    }
    int main(){
    	int n,t;
    	while(scanf("%d %d",&t,&n)!=EOF){
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=n;j++){
    				map[i][j]=(i==j?0:inf);
    			}
    		}
    		while(t--){
    			int b,c,d;
    			scanf("%d %d %d",&b,&c,&d);
    			if(map[b][c]>d){
    				map[b][c]=d;
    				map[c][b]=d;
    			}
    		}
    		dijkstra(n,n);
    		printf("%d
    ",dist[1]);
    	} 
    } 
  • 相关阅读:
    泛海精灵Alpha阶段回顾
    [Scrum]1.6
    【Scrum】1.5
    泛海精灵 Beta计划 (草案)
    【scrum】1.7
    学术搜索的Bug
    Linux下查看文件和文件夹大小
    求7的34次方
    去除给定的字符串中左边、右边、中间的所有空格的实现
    身份证18位验证
  • 原文地址:https://www.cnblogs.com/ZJUT-jiangnan/p/3934516.html
Copyright © 2020-2023  润新知