hduoj A strange lift---1548

来源:互联网 发布:天刀捏脸数据女 萌妹子 编辑:程序博客网 时间:2024/06/05 18:33
//dijkstra算法  最短路径
<pre name="code" class="cpp">#include<stdio.h>#include<stdlib.h>#include<string.h>#define INF 1000000#define max 205int n;int edge[max][max];int s[max];int dist[max];int path[max];void dijik(int v0){int i,j,k;for(i=1;i<=n;i++){dist[i]=edge[v0][i];s[i]=0;if(i!=v0&&dist[i]<INF) path[i]=v0;else path[i]=-1;}s[v0]=1;dist[v0]=0;for(i=1;i<n;i++){int min=INF,u=v0;for(j=1;j<=n;j++){if(!s[j]&&dist[j]<min){u=j;min=dist[j];}}s[u]=1;for(k=1;k<=n;k++){if(!s[k]&&edge[u][k]<INF&&dist[u]+edge[u][k]<dist[k]){dist[k]=dist[u]+edge[u][k];path[k]=u;}}}}int main(){int i,j;int b,c,t;while(1){scanf("%d",&n);if(n==0) break;else scanf("%d %d",&b,&c); memset(edge,0,sizeof(edge));for(i=1;i<=n;i++){scanf("%d",&t);if(i-t>=1) edge[i][i-t]=1;if(i+t<=n) edge[i][i+t]=1;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j) edge[i][j]=0;else if(edge[i][j]==0) edge[i][j]=INF;}}/*for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",edge[i][j]);}printf("\n");}*/dijik(b);int shortest[max];//for(i=1;i<=n;i++)//{//if(i==b) continue;//printf("%d ",dist[i]);memset(shortest,0,sizeof(shortest));int k=0;shortest[k]=c;while(path[shortest[k]]!=0){k++;shortest[k]=path[shortest[k-1]];}k++;shortest[k]=(b);//for(j=k;j>0;j--)//{//printf("%d->",shortest[j]);//}if(dist[c]==INF) printf("-1\n");else printf("%d\n",dist[c]);//}}return 0;}/*5 1 53 3 1 2 5*/


                                             
0 0
原创粉丝点击