zoukankan      html  css  js  c++  java
  • poj 3767 I Wanna Go Home (有限制的最短路)

    http://poj.org/problem?id=3767

      1 #include<stdio.h>
      2 #include<iostream>
      3 #include<algorithm>
      4 #include<cstring>
      5 #include<cmath>
      6 #include<queue>
      7 #include<set>
      8 #include<map>
      9 #define Min(a,b)  a>b?b:a
     10 #define Max(a,b)  a>b?a:b
     11 #define CL(a,num)  memset(a,num,sizeof(a));
     12 #define inf 9999999
     13 #define maxn 1030
     14 #define eps  1e-6
     15 using namespace std;
     16 int n,m;
     17 int mat[maxn][maxn],vis[maxn],pre[maxn],f[maxn],dis[maxn];
     18 void init()
     19 {
     20     for(int i=0; i<=n;i++)
     21     {
     22         for(int j=0;j<=n;j++)
     23             mat[i][j]=inf;
     24     }
     25 }
     26 void dij()
     27 {
     28     int i,j,k;
     29 
     30     for(i=0;i<=n;i++)
     31     {
     32         dis[i]=inf;
     33         vis[i]=0;
     34         pre[i]=0;
     35     }
     36     dis[1]=0;
     37     pre[1]=1;
     38     for(i=0;i<n;i++)
     39     {
     40         int min=inf;
     41         for(j=1;j<=n;j++)
     42         {
     43             if(!vis[j]&&dis[j]<min)
     44             {
     45                 min=dis[j];
     46                 k=j;
     47             }
     48         }
     49         vis[k]=1;
     50 
     51         for(j=1;j<=n;j++)
     52         {
     53 
     54 
     55 
     56 
     57             if(!vis[j]&mat[k][j]!=inf&&dis[j]>dis[k]+mat[k][j])
     58             {
     59 
     60 
     61 
     62                 dis[j]=dis[k]+mat[k][j];
     63 
     64             }
     65         }
     66 
     67     }
     68 }
     69 int main()
     70 {
     71     int i,x,y,z,a,j;
     72     while(scanf("%d",&n),n)
     73     {
     74         scanf("%d",&m);
     75         init();
     76         for(i=1;i<=m;i++)
     77         {
     78             scanf("%d%d%d",&x,&y,&z);
     79             mat[x][y]=mat[y][x]=z;
     80         }
     81         for(i=1;i<=n;i++)
     82         {
     83           scanf("%d",&f[i]);
     84 
     85         }
     86         for(i=1;i<=n;i++)
     87         {
     88             for(j=1;j<=n;j++)
     89             {
     90                 if(f[i]!=f[j])
     91                 {
     92                     if(f[i]==1&&f[j]==2)
     93                         mat[j][i]=inf;
     94                     else
     95                        if(f[j]==1&&f[i]==2)
     96                         mat[i][j]=inf;
     97                 }
     98             }
     99         }
    100         dij();
    101         if(dis[2]!=inf)printf("%d\n",dis[2]);
    102         else printf("-1\n");
    103     }
    104 
    105 }
  • 相关阅读:
    ARC 没有自动释放内存
    查看python的路径
    django 一些库
    实现点击按钮,出现隐藏布局
    蓝牙的开启以及搜索
    退出当前程序(应用)的小提示
    删除SharedPreferences的存储记忆
    BaseAdapter和SimpleAdapter的区别
    数据类型
    交互与注释
  • 原文地址:https://www.cnblogs.com/acSzz/p/2616380.html
Copyright © 2011-2022 走看看