zoukankan      html  css  js  c++  java
  • hdu 1874 畅通工程续

    Dijkstra算法的模板题,嘻嘻,第一道最短路,模板题呀,本来幻想着1A 的,可惜呀,少了一个条件,一个很重要的条件,既然是最短路,有重边的话,当然是保存较短的一条边,结果我根本没注意到,直接覆盖了

    悲剧,……………………

    最短路径的四个算法,看了快一天了,终于有一点点的收获,多亏了大牛博客上的详解呀

    http://www.wutianqi.com/?p=1890   Dijkstra算法实现

    http://www.wutianqi.com/?p=1912   Bellman-Ford算法

    http://www.wutianqi.com/?p=2285   SPFA(Shortest Path Faster Algorithm) 上一个算法的优化

    //以上三个是层层深入的,单源最短路

    http://www.wutianqi.com/?p=1903

    //这个是求解任意两点间的最短距离

    #include<iostream>
    #include<string>
    using namespace std;
    bool s[200];
    int c[200][200],dis[200],n,m,S,T;
    void dijkstra()
    {
    	for(int i=0;i<n;i++)
    	{
    		dis[i]=c[S][i];
    	}
    	dis[S]=0;
    	for(int i=1;i<n;i++)
    	{
    		int tmp=INT_MAX,v=S;
    		for(int j=0;j<n;j++)
    			if(!s[j]&&dis[j]<tmp)
    			{
    				tmp=dis[j];
    				v=j;
    			}
    		s[v]=1;
    		for(int j=0;j<n;j++)
    			if(!s[j]&&c[v][j]<INT_MAX)
    			{
    				int newdis=dis[v]+c[v][j];
    				if(newdis<dis[j])
    					dis[j]=newdis;
    			}
    	}
    }
    int main()
    {
    	int len;
    	while(cin>>n>>m)
    	{
    		for(int i=0;i<n;i++)
    			for(int j=0;j<n;j++)
    				c[i][j]=INT_MAX;
    		int a,b;
    		for(int k=0;k<m;k++)
    		{
    			cin>>a>>b>>len;
    			if(len<c[a][b])
    			{
    			 c[a][b]=len;
    			 c[b][a]=len;
    			}
    		}
    		cin>>S>>T;
    		memset(s,0,sizeof(s));
    		s[S]=1;
    		dijkstra();
    		if(dis[T]<INT_MAX)
    			cout<<dis[T]<<endl;
    		else cout<<-1<<endl;
    	}
    	return 0;
    }
    


  • 相关阅读:
    Python学习笔记 for windows 二
    Socket.io:有点意思
    MEAN Stack:创建RESTful web service
    在EC2上安装MEAN环境
    NodeJS:树的序列化
    NodeJS:树的反序列化
    NodeJS学习:爬虫小探补完计划
    NodeJS学习:爬虫小探
    依赖包bcrypt安装Issues
    Mongoose:Schema之路
  • 原文地址:https://www.cnblogs.com/nanke/p/2136496.html
Copyright © 2011-2022 走看看