zoukankan      html  css  js  c++  java
  • C++ 洛谷 1261:【例9.5】城市交通路网

    最短路径讲解

    1261:【例9.5】城市交通路网

    #pragma GCC optimize(2)//开O2,不用管,建议慎用(NOIP不准用)
    #include<cstdio> 
    #include<string>
    #include<iostream>
    #include<cstring>
    #include<stdlib.h>
    using namespace std;
    const int maxn=101;
    const int inf=0x7f7f7f7f;
    int n;
    int map[maxn][maxn];
    bool vis[maxn];
    int dis[maxn];
    int pre[maxn];
    int f=1;
    int read()
    {
        int x=0,f=1;char c=getchar();
        while(!isdigit(c)){
            if(c=='-')
            f=-1;
            c=getchar();
        }
        while(isdigit(c))
        {
            x=x*10+c-'0';
            c=getchar();
        }
        return x*f;
    }
    void print(int x)//经典的输出函数
    {
        if(x==0)return;
        else {
            print(pre[x]);
            printf("%d ",x+1);
        }
    }
    void work()
    {
        n=read();
        memset(dis,inf,sizeof(dis));
        for (int i=0;i<n;i++)
        for (int j=0;j<n;j++)
        {
            map[i][j]=read();
            if(map[i][j]==0)
            map[i][j]=inf;
            else if(i==0)
            dis[j]=map[i][j];
        }
        dis[0]=0;
        //printf("minlong=%d
    ",dis[n-1]);
        //printf("%d",dis[4]);
        for(int i=0;i<n;i++)
        {
            int  minn=inf,x=0;
            for (int j=0;j<n;j++)
            {
                if(!vis[j]&&minn>dis[j])
                minn=dis[j],x=j;
            }
            vis[x]=1;
            //printf("%d
    ",x);
            for (int j=0;j<n;j++)
            if(map[x][j]+dis[x]<dis[j])
            {
                pre[j]=x;  //我竟然卡了输出
                dis[j]=map[x][j]+dis[x];
            }
        }
        printf("minlong=%d
    ",dis[n-1]);
        printf("1 ");
        print(n-1);
    }
    int main()
    {
        work();
        return 0;
    }
  • 相关阅读:
    4.JDBC技术
    3.MySQL数据库
    2.Oracle数据库
    (转载)Linux 套接字编程中的 5 个隐患
    一个Sqrt函数引发的血案
    二叉搜索树BinarySearchTree(C实现)
    vector,list.queue,array.....
    boost::Circular Buffer
    boost::operators
    Disjoint Sets
  • 原文地址:https://www.cnblogs.com/mzyczly/p/11209763.html
Copyright © 2011-2022 走看看