zoukankan      html  css  js  c++  java
  • Dijk入门(杭电2544题)

    #include<iostream>
    #include<cstring>
    using namespace std;
    #define INF 0x3f3f3f3f
    int n,m;
    int map[105][105];
    int vis[105];
    int stemp[105];
    int dijk(){
        memset(vis,0,sizeof(vis));
        vis[1]=1; //标记第一个已选
        memset(stemp,0,sizeof(stemp));
        int min;
        int flag1=100000,countx=0,county,index2;
        while(county!=n){//如果是联通图那最先遍历到的就是最小的
            for(int i=1;i<=n;i++){//第一重循环寻找可以扩展的点
                if(vis[i]){
                    min=INF;
                    for(int j=1;j<=n;j++){//第二重循环找到该点最短的扩展点
                        if(!vis[j]&&min>map[i][j]){
                            index2=j;
                            min=map[i][j];
                        }
                    }
                 }
                 if(vis[i]&&min+stemp[i]<stemp[countx]+flag1){ //比较每个点的最小扩展点,选出总距离最短的标记该点和对应的扩展点
                    flag1=min;
                    countx=i;
                    county=index2;
                 }
            }
    //        cout<<"!"<< flag1<<' '<<countx<<' '<<county<<endl;
            map[county][countx]=INF;//一但往前走就不存在回溯
            stemp[county]=flag1+stemp[countx];//记录每一个已选的路程
            vis[county]=1;
            flag1=INF;//初始化第一个点满足条件
            countx=0;
        }
        return stemp[n];
    }
    int main(){
        while(cin>>n>>m){
            if(!n&&!m) break;
            memset(map,INF,sizeof(map));
            while(m--){
                int a,b,c;
                cin>>a>>b>>c;
                map[a][b]=c;
                map[b][a]=c;
            }
        cout<<dijk()<<endl;
        }
    }
  • 相关阅读:
    项目编译
    sqlserver查列名
    list<>初始化赋值两种方式
    看到一句很不错的话
    typescript
    vscode里div等html标签代码补全
    JavaScript 基于原型链的继承
    大数据系列01:大数据离线计算平台hadoop集群搭建和本地环境配置实践
    java数据类型
    计算机基础及java基础
  • 原文地址:https://www.cnblogs.com/yzbpxx/p/10841676.html
Copyright © 2011-2022 走看看