zoukankan      html  css  js  c++  java
  • sdut Emergency

    用的时候太不细心关注细节问题了

    #include<iostream>

    #include<stdio.h>
    #include<cstring>
    using namespace std;
    int map[333][333];
    int v[333];
    #define INF 999999999
    int min(int a,int b)
    {
        if(a<b)
            return a;
        return b;
    }
    int main()
    {
        int i,j;
        int n,m,q,x,y,w,k;
        int cas=0;
        while(scanf("%d%d%d",&n,&m,&q)!=EOF)
        {
            cas++;
            if(n==0&&m==0&&q==0)
                break;
            memset(v,0,sizeof(v));
            for(i=0;i<n;i++)                           //有可能存在重边  取最小的边
            {
                for(j=0;j<n;j++)
                    map[i][j]=INF;
                map[i][i]=0;
            }
            for(i=0;i<m;i++)
            {
                scanf("%d%d%d",&x,&y,&w);
                if(map[x][y]>w)
                    map[x][y]=w;
            }
            printf("Case %d: ",cas);
            while(q--)
            {
                scanf("%d",&w);
                if(w==1)                                  //一开始全没解放  直接输出
                {
                    scanf("%d%d",&x,&y);
                    if(!v[x]||!v[y])
                    {
                        printf("City %d or %d is not available. ",x,y);
                        continue;
                    }
                    if(map[x][y]!=INF)
                        printf("%d ",map[x][y]);
                    else
                        printf("No such path. ");
                }
                else                                                        //用floyd算法 更新通过x点的边的最短路径
                {
                    
                    scanf("%d",&x);
                    if(v[x])
                    {
                        printf("City %d is already recaptured. ",x);
                    }
                    else
                    {
                        
                        v[x]=1;
                        k=x;
                        for(i=0;i<n;i++)
                            for(j=0;j<n;j++)
                            {
                                if(map[i][k]!=INF&&map[k][j]!=INF)//  注意最佳选择是不管解没解放  都要算出来经过k的路程 因为更新非解救城市的时候需要用到
                                if(map[i][k]+map[k][j]<map[i][j])
                                {
                                    map[i][j]=map[i][k]+map[k][j];
                                }
                            }
                            
                            
                    }
                    
                }
            }
            printf(" ");
        }
        return 0;
    }

  • 相关阅读:
    golang GC(二 定位)
    MySQL的安装与配置——详细教程
    js实现关闭浏览器
    解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
    如何将将本地电脑部署成服务器
    Mysql统计每年每个月的数据——详细教程
    博客、笔记
    JAVAWEB实现修改功能
    JAVAWEB实现添加功能
    JavaWeb实现删除功能
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3702164.html
Copyright © 2011-2022 走看看