zoukankan      html  css  js  c++  java
  • 最短路算法

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int map[1000][1000];
    int main()
    {
    	int n,m,i,j,k;
    	cin>>n>>m;
    	for(i=1;i<=n;i++)
    		for(j=1;j<=n;j++)
    		{
    			if(i==j)
    			    map[i][j]=0;
    			else map[i][j]=99999999;
    		}
    	for(i=1;i<=m;i++)
    	{
    		int x,y,z;
    		cin>>x>>y>>z;
    		map[x][y]=z;
    	}
    	for(i=1;i<=n;i++)
    		for(j=1;j<=n;j++)
    			for(k=1;k<=n;k++)
    				map[j][k]=min(map[j][k],map[j][i]+map[i][k]);
    	for(i=1;i<=n;i++)
    	{
    	    for(j=1;j<=n;j++)
    	    {
    	    	cout<<map[i][j];
    	    	if(j!=n) cout<<" ";
    	    }
        	cout<<endl;
        }
    	//system("pause");
    	return 0;
    }
    

    这是Floyd  O(n^3)

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int map[1000][1000],dis[10000],book[10000];
    int main()
    {
    	int n,m;
    	cin>>n>>m;
    	int i,j,k;
    	for(i=1;i<=n;i++)
    		for(j=1;j<=n;j++)
    		{
    			if(i==j)
    			    map[i][j]=0;
    			else map[i][j]=99999999;
    		}
    	while(m--)
    	{
    		int x,y,z;
    		cin>>x>>y>>z;
    		map[x][y]=z;
    	}
    	for(i=1;i<=n;i++)
    	{
    		dis[i]=map[1][i];
    	}
    	book[1]=1;
    	for(i=1;i<=n;i++)
    	{
    		int u;
    		int minn=99999999;
    		for(j=1;j<=n;j++)
    		{
    			if(dis[j]<minn&&book[j]==0)
    			{
    				minn=dis[j];
    				u=j;
    			}
    		}
    		book[u]=1;
    		for(j=2;j<=n;j++)
    		{
    			if(dis[j]>dis[u]+map[u][j])
    			    dis[j]=dis[u]+map[u][j];
            }
        }
        for(i=1;i<=n;i++)
        {
            cout<<dis[i];
            if(i!=n) cout<<" ";
        }
    	//system("pause");
    	return 0;
    }
    

     这是Dijkstra

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<cstring>
    using namespace std;
    int x[1000],y[1000],z[1000];
    int dis[1000];
    int main()
    {
    	int n,m;
    	cin>>n>>m;
    	int i,j,k;
    	for(i=1;i<=m;i++)
    	{
    		cin>>x[i]>>y[i]>>z[i];
    	}
    	for(i=1;i<=n;i++) dis[i]=99999999;
    	dis[1]=0;
    	for(i=1;i<=n-1;i++)
    	{
    		for(j=1;j<=m;j++)
    		{
    			if(dis[y[j]]>dis[x[j]]+z[j]);
    			    dis[y[j]]=dis[x[j]]+z[j];
    		}
    	}
    	for(i=1;i<=n;i++)
    	{
    		cout<<dis[i];
    		if(i!=n) cout<<" ";
    	}
    	//system("pause");
    	return 0;
    }
    

     这是Bellman-ford

    蒟蒻总是更懂你✿✿ヽ(°▽°)ノ✿
  • 相关阅读:
    C++---const
    qt--textEdit多行文本编辑框
    qt--QByteArray字节数组
    qt5--拖放
    qt5--自定义事件与事件的发送
    qt5--键盘事件
    qt5--鼠标事件
    qt5-事件过滤器
    qt5-event事件的传递
    qt-事件的接受和忽略
  • 原文地址:https://www.cnblogs.com/WWHHTT/p/7563145.html
Copyright © 2011-2022 走看看