zoukankan      html  css  js  c++  java
  • 数据结构与算法分析

    先附上Djikstra的代码:普通版

    const int maxn=101;
    const int INF=0x3f3f3f3f;
    int edges[maxn][maxn];
    int dist[maxn];
    void dijkstra(int s,int n){
    	bool done[maxn];
    	memset(done,0,sizeof(done));
    	done[s]=true;
    	for(int i=0;i<n;i++)
    		dist[i]=edges[s][i];
    	for(int i=0,min,u;i<n;i++){
    		min=INF;
    		for(int j=0;j<n;j++)
    			if(!done[j] && dist[j]<min){
    				min=dist[j];
    				u=j;
    			}
    			done[u]=true;
    			for(int j=0;j<n;j++){
    				if(dist[u]+edges[u][j]<dist[j])
    					dist[j]=dist[u]+edges[u][j];
    			}
    	}
    }

    2.Bellman-Ford 算法

    优点:能处理包含负权边的图

    //单源点最短路径 - Bellman-Ford算法
    
    #define maxn 31
    #define inf 0x3f3f3f3f	
    class edge{
    public:
    	int from,to,cost;
    	edge(){
    		from=0,to=0,cost=0;
    	}
    	edge(int a,int b ,int c){
    		from=a,to=b,cost=c;
    	}
    };
    
    edge Edges[maxn];
    int dist[maxn];
    
    void init(){
    	for(int i=1;i<maxn;i++){
    		for(int j=1;j<maxn;j++){
    			if(i==j)   Edges[i]=edge(i,j,1);
    			else       Edges[i]=edge(i,j,inf);
    		}
    	}
    }
    
    /*V:顶点数,E:边数*/
    void bellman_ford(int s,int V,int E){
    	for(int i=0;i<V;i++)
    		dist[i]=inf;
    	dist[s]=0;
    	for(int i=1;i<=V;i++){
    		bool update=false;
    		for(int j=0;j<E;j++){
    			edge e=Edges[j];
    			if(dist[e.from]!=inf && dist[e.to]>dist[e.from]+e.cost){
    				dist[e.to]=dist[e.from]+e.cost;
    				update=true;
    			}
    		}
    		if(!update)break;
    	}
    }

    3.Floyd_Warshall算法

     #define maxn 31
     #define inf 0x3f3f3f3f
     double edges[maxn][maxn];
     void init(){
         for(int i=1;i<maxn;i++)
             for(int j=1;j<maxn;j++)
                 edges[i][j]=(i==j?1:inf);
     }
      
     void floyd_warshall(int n){
         for(int k=1;k<=n;k++){
             for(int i=1,u;i<=n;i++){
                 for(int j=1;j<=n;j++){
                     if(edges[i][k]+edges[k][j]<edges[i][j])
                         edges[i][j]=edges[i][k]+edges[k][j];
                 }
             }
         }
     }
  • 相关阅读:
    找不到vc_runtimeMinimum_x86.msi!
    ubuntu开启coredump
    log4j2项目打成jar包运行日志无法打印
    linux 下使用 tc 模拟网络延迟和丢包
    Spring MVC
    typora实现图片上传
    java异常和调优
    java线程
    java三大特征
    webstorm如何更换主题以及更换主题后字体缩放问题
  • 原文地址:https://www.cnblogs.com/ZJUT-jiangnan/p/3650975.html
Copyright © 2011-2022 走看看