九度 OJ 1162 I Wanna Go Home

来源:互联网 发布:人工蜂群算法流程图 编辑:程序博客网 时间:2024/05/20 23:02

有一句话不是很懂,看了前辈的代码,学习了。

#include <stdio.h>#include <vector>using namespace std;struct E{ int nextNode; int cost;};vector<E> edge[601]; int dis[601];bool mark[601];int leader[601];int main(){ int n , m; while(scanf("%d",&n) != EOF && n != 0){   scanf("%d",&m);   for(int i = 1 ; i <= n ; ++i){    edge[i].clear();    dis[i] = -1;    mark[i] = false;   }   for(int i = 1 ; i <= m ; ++i){    int a , b , t;    scanf("%d%d%d",&a,&b,&t);    E tmp;    tmp.nextNode = b;    tmp.cost = t;    edge[a].push_back(tmp);    tmp.nextNode = a;    edge[b].push_back(tmp);   }   for(int i = 1 ; i <= n ;++i){    scanf("%d",&leader[i]);   }   mark[1] = true;   //Dijkstra   dis[1] = 0;   int newp = 1;   for(int i = 1 ; i < n ; ++i){    for(int j = 0 ; j < edge[newp].size() ; ++j){     int t = edge[newp][j].nextNode;     int c = edge[newp][j].cost;     if(mark[t] == true) continue;     if(c == -1) continue;     if(leader[newp] == 2 && leader[t] == 1) continue; //跳过从2到1的路线     if(dis[t] == -1 || dis[t] > dis[newp] + c){      dis[t] = dis[newp]+c;     }    }    int min = 501;    for(int j = 1 ; j <= n ; ++j){     if(mark[j] == true) continue;     if(dis[j] == -1) continue;     if(dis[j] < min){      min = dis[j];      newp = j;     }    }    mark[newp] = true;   }   printf("%d\n",dis[2]); } return 0;}



0 0
原创粉丝点击