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;
    }

  • 相关阅读:
    CentOS 7 安装MySQL 5.6遇到的疑难杂症小结
    ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
    MS SQL巡检系列——检查外键字段是否缺少索引
    Linix登录报"/etc/profile: line 11: syntax error near unexpected token `$'{ ''"
    MS SQL巡检系列——检查重复索引
    [转载】——故障排除:Shared Pool优化和Library Cache Latch冲突优化 (文档 ID 1523934.1)
    SQL Server 2014 Database Mail重复发送邮件特殊案例
    ORACLE推导参数Derived Parameter介绍
    SQL SERVER 数据库各版本功能对比
    SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3702164.html
Copyright © 2011-2022 走看看