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

  • 相关阅读:
    流式布局思想
    盒子的显隐
    高级布局 浮动 清浮动
    display总结 overflow知识
    边界圆角 盒模型布局 图片背景 精灵图
    io模型
    协程
    GIL 进程池与线程池
    守护进程 互斥锁 进程间通讯
    子进程
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3702164.html
Copyright © 2011-2022 走看看