zoukankan      html  css  js  c++  java
  • hdu 3665(最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3665

    思路:对海相邻的点进行标记即可,然后就是裸的最短路了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<queue>
     6 using namespace std;
     7 #define inf 1<<30
     8 bool mark[22];
     9 bool visited[22];
    10 int dist[22];
    11 int map[22][22];
    12 int n;
    13 
    14 void spfa(){
    15    memset(mark,false,sizeof(mark));
    16    for(int i=0;i<n;i++)dist[i]=inf;
    17    dist[0]=0;mark[0]=true;
    18    queue<int>Q;
    19    Q.push(0);
    20    while(!Q.empty()){
    21       int u=Q.front();
    22       Q.pop();
    23       mark[u]=false;
    24       for(int i=0;i<n;i++)if(u!=i){
    25          if(map[u][i]<inf&&dist[u]+map[u][i]<dist[i]){
    26             dist[i]=dist[u]+map[u][i];
    27             if(!mark[i]){ mark[i]=true;Q.push(i); }
    28          }
    29       }
    30    }
    31 }
    32 
    33 
    34 int main(){
    35  //  freopen("1.txt","r",stdin);
    36    int m,p,s,l,ans;
    37    while(~scanf("%d",&n)){
    38       for(int i=0;i<n;i++){
    39          for(int j=0;j<n;j++){
    40             i==j?map[i][j]=0:map[i][j]=inf;
    41          }
    42       }
    43       memset(visited,false,sizeof(visited));
    44       for(int i=0;i<=n-1;i++){
    45          scanf("%d%d",&m,&p);
    46          if(p)visited[i]=true;
    47          while(m--){
    48             scanf("%d%d",&s,&l);
    49             map[s][i]=map[i][s]=min(map[i][s],l);
    50          }
    51       }
    52       spfa();ans=inf;
    53       for(int i=0;i<n;i++)if(visited[i])ans=min(ans,dist[i]);
    54       printf("%d\n",ans);
    55    }
    56    return 0;
    57 }
    View Code
  • 相关阅读:
    解决sql2008附加不了2005的数据库文件的问题
    方阵
    台阶问题
    螺旋矩阵
    兔子问题
    九乘九乘法口诀
    选猴王
    拿鸡蛋问题
    软工个人作业
    小学四则运算法则训练
  • 原文地址:https://www.cnblogs.com/wally/p/3116498.html
Copyright © 2011-2022 走看看