您的位置:首页 > 其它

poj 1847 Dijakstra 还是低级错误

2013-02-04 18:24 197 查看
//关键是没有读懂题目
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#define NUM 105
using namespace std;
#define INF 0x3f3f3f3f
//使用vector必须iostream using namespace std;
int flag[NUM];
int dist[NUM];
void init(){
for(int i=0;i<NUM;i++){
flag[i]=0;
dist[i]=INF;
}
}

struct Edge{
int to;
int cost;
};

vector<Edge> edges[NUM];

int main(){
int N,A,B;
scanf("%d%d%d",&N,&A,&B);
for(int i=1;i<=N;i++){
int num;
edges[i].clear();
scanf("%d",&num);
for(int ii=0;ii<num;ii++){
int t;
scanf("%d",&t);
Edge tmp;
tmp.to=t;
if(ii==0)
{
tmp.cost=0;
}
else
{
tmp.cost=1;
}
edges[i].push_back(tmp);
}
}
init();
int from=A;
dist[from]=0;
for(int index=1;index<N;index++){//执行N-1次可以了
flag[from]=1;
for(int k=0;k<edges[from].size();k++){
int to  =edges[from][k].to;
int cost=edges[from][k].cost;
if(flag[to]==1)//已访问
continue;

if(dist[to]>dist[from]+cost){
dist[to]=cost+dist[from];
}
}
int min=INF;
for(int jj=1;jj<=N;jj++){
if(flag[jj]==0){//没有被标记
if(dist[jj]<min){
from=jj;
min=dist[jj];
}
}
}
}
if(dist[B]==INF){
printf("-1\n");
return 0;
}
printf("%d\n",dist[B]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: