?? 公交車.c
字號:
#include<stdio.h>
#define N 50
#define M 20
int g[N][N];
int a[N+1],dist[N],m,n;
void buildG()
{
int i,j,k,sc,dd;
printf("輸入公交線路數(shù),公交站數(shù)\n");
scanf("%d,%d",&m,&n);
for(i=0;i<n;i++)
for(j=0;j<n;j++) g[i][j]=0;
for(i=0;i<m;i++)
{
printf("沿第%d條公交線路前進(jìn)方向的各站編號(0<=編號<=%d,-1結(jié)束):\n",i+1,n-1);
sc=0;
while(1)
{
scanf("%d",&dd);
if(dd==-1) break;
if(dd>=0&&dd<n) a[sc++]=dd;
}
a[sc]=-1;
for(k=1;a[k]>=0;k++)
for(j=0;j<k;j++)
g[a[j]][a[k]]=1;
}
}
int minlen()
{
int j,k;
for(j=0;j<n;j++) dist[j]=g[0][j];
dist[0]=1;
do
{
for(k=-1;j=0;j++)
if(dist[j]>0&&(k==-1||dist[j]<dist[k])) k=j;
if(k<0||k==n-1) break;
dist[k]=-dist[k];
for(j=1;j<n;j++)
if(dist[j]>=0&&g[k][j]==1&&(dist[j]==0||-dist[k]+1<dist[j]))
dist[j]=-dist[k]+1;
} while(1);
j=dist[n-1];
return k<0?-1:j-1;
}
void main()
{
int t;
buildG();
if ((t=minlen())<0)
{
printf("無解!\n");
}
else
{
printf("從0號站到%d站需要換車%d次\n",n-1,t);
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -