📄 两次换乘.cpp
字号:
fgets(road[i].Roadway_Name,5,fp2);
fseek(fp2,1L,1);
road[i].Charge_Mode=fgetc(fp2);
fseek(fp2,1L,1);
for(j=1; ;j++)
{
fgets(cc,5,fp2);
if(atoi(cc)!=0)
{
strcpy(road[i].Stop_Name[j],cc);
fseek(fp2,1L,1);
}
else
break;
}
road[i].Stop_Amount=j-1;
fseek(fp2,(87-j)*5+2L,1);
}
if(Find_Tow_Stop_Road(start,end)==1)
{
/* int u=1,Amount;
Amount=line[1].Stop_Amount;
for(u=2;line[u].Stop_Amount!=0;u++)
{
if(line[u].Stop_Amount<Amount)
Amount=line[u].Stop_Amount;
}*/
for(int m=1;m<=l;m++)
{
line1[m].Change_Amount=line[k-l+m].Change_Amount;
line1[m].Stop_Amount=line[k-l+m].Stop_Amount;
strcpy(line1[m].Stop_1,line[k-l+m].Stop_1);
strcpy(line1[m].Stop_2,line[k-l+m].Stop_2);
strcpy(line1[m].Way_1,line[k-l+m].Way_1);
}
ss1=line1[1].Stop_Amount*line1[1].Change_Amount;
//ss2=line5[1].Change_Amount;
for(int ii=2;ii<m;ii++)
{
if(line1[ii].Stop_Amount*line1[ii].Change_Amount<=ss1)
{
ss1=line1[ii].Stop_Amount*line1[ii].Change_Amount;
//ss1=line5[ii].Stop_Amount;
}
}
printf("最优路径有:\n");
int nn=0;
for(q=1;q<m;q++)
//if(line1[q].Stop_Amount*line1[q].Change_Amount<=ss1)
printf("\n第%d条最佳路径:换乘0次,花费%d元,路程%d站\nS%s-%s-S%s\n",++nn,line1[q].Change_Amount,line1[q].Stop_Amount,line1[q].Stop_1,line1[q].Way_1,line1[q].Stop_2);
ss2=nn;
}
else
{
for(i=1;i<atoi(start);i++)
{
a=a+zhandian[i].n;
}
for(j=1;j<atoi(end);j++)
{
b=b+zhandian[j].n;
}
for(e=a+1;e<=a+zhandian[atoi(start)].n;e++)
{
int n1;
char tm1[5];
if(stop[e].Roadway_Name[0]=='D')
{
strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
n1=2*atoi(tm1);
qm=road[n1].Stop_Amount;
}
else
{
strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
n1=2*atoi(tm1)-1;
qm=road[n1].Stop_Amount;
}
for(q=stop[e].Roadway_No;q<=qm;q++)
{
for(r=b+1;r<=b+zhandian[atoi(end)].n;r++)
{
int n2;
char tm2[5];
if(stop[r].Roadway_Name[0]=='D')
{
strcpy(tm2,JieQu(stop[r].Roadway_Name,2,3));
n2=2*atoi(tm2);
wm=road[n2].Stop_Amount;
}
else
{
strcpy(tm2,JieQu(stop[r].Roadway_Name,2,3));
n2=2*atoi(tm2)-1;
wm=road[n2].Stop_Amount;
}
for(w=1;w<=stop[r].Roadway_No;w++)
{
strcpy(aa,road[n1].Stop_Name[q]);
strcpy(bb,road[n2].Stop_Name[w]);
if(strcmp(aa,bb)==0 && stop[e].Roadway_No<q && r>stop[r].Roadway_No)//如果两条路有交叉点
{
sige1=0;
for(int p=1;p<=o;p++)
if(strcmp(aa,line4[p].Stop_2)==0)
{
// printf("%d\n",o);
sige1=1;
break;
}
if(sige1==1)
continue;
Find_Tow_Stop_Road(start,aa);
for(m1=1;m1<=l;m1++)
{
line1[m1].Change_Amount=line[k-l+m1].Change_Amount;
line1[m1].Stop_Amount=line[k-l+m1].Stop_Amount;
strcpy(line1[m1].Stop_1,line[k-l+m1].Stop_1);
strcpy(line1[m1].Stop_2,line[k-l+m1].Stop_2);
strcpy(line1[m1].Way_1,line[k-l+m1].Way_1);
}
// k++;
Find_Tow_Stop_Road(aa,end);
for(m2=1;m2<=l;m2++)
{
line2[m2].Change_Amount=line[k-l+m2].Change_Amount;
line2[m2].Stop_Amount=line[k-l+m2].Stop_Amount;
strcpy(line2[m2].Stop_1,line[k-l+m2].Stop_1);
strcpy(line2[m2].Stop_2,line[k-l+m2].Stop_2);
strcpy(line2[m2].Way_1,line[k-l+m2].Way_1);
}
for(int t=1;t<m1;t++)
for(int y=1;y<m2;y++)
{
line4[++o].Change_Amount=line1[t].Change_Amount+line2[y].Change_Amount;
line4[o].Stop_Amount=line1[t].Stop_Amount+line2[y].Stop_Amount;
strcpy(line4[o].Stop_1,line1[t].Stop_1);
strcpy(line4[o].Stop_2,line1[t].Stop_2);
strcpy(line4[o].Way_1,line1[t].Way_1);
strcpy(line4[o].Way_2,line2[y].Way_1);
strcpy(line4[o].Stop_3,line2[y].Stop_2);
}
// k++;
sige=1;
}
}
}
}
}
ss1=line4[1].Stop_Amount*line4[1].Change_Amount;
//ss2=line5[1].Change_Amount;
for(int ii=2;ii<=o;ii++)
{
if(line4[ii].Stop_Amount*line4[ii].Change_Amount<=ss1)
{
ss1=line4[ii].Stop_Amount*line4[ii].Change_Amount;
//ss1=line5[ii].Stop_Amount;
}
}
// for(int jj=2;jj<=o;jj++)
//{
// if(line4[jj].Change_Amount<ss2)
// ss2=line4[jj].Change_Amount;
// }
int nn=0;
for(q=1;q<=o;q++)
if(line4[q].Stop_Amount*line4[q].Change_Amount<=ss1)
printf("\n第%d条最佳路径:换乘1次,花费%d元,路程%d站\nS%s-%s-S%s-%s-S%s\n",++nn,line4[q].Change_Amount,line4[q].Stop_Amount,line4[q].Stop_1,line4[q].Way_1,line4[q].Stop_2,line4[q].Way_2,line4[q].Stop_3);
ss2=nn;
if(sige==0)
{
for(e=a+1;e<=a+zhandian[atoi(start)].n;e++)
{
int n1;
char tm1[5];
if(stop[e].Roadway_Name[0]=='D')
{
strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
n1=2*atoi(tm1);
qm=road[n1].Stop_Amount;
}
else
{
strcpy(tm1,JieQu(stop[e].Roadway_Name,2,3));
n1=2*atoi(tm1)-1;
qm=road[n1].Stop_Amount;
}
for(q=stop[e].Roadway_No;q<=qm;q++)
{
for(r=b+1;r<=b+zhandian[atoi(end)].n;r++)
{
int n2;
char tm2[5];
if(stop[r].Roadway_Name[0]=='D')
{
strcpy(tm2,JieQu(stop[r].Roadway_Name,2,3));
n2=2*atoi(tm2);
wm=road[n2].Stop_Amount;
}
else
{
strcpy(tm2,JieQu(stop[r].Roadway_Name,2,3));
n2=2*atoi(tm2)-1;
wm=road[n2].Stop_Amount;
}
for(w=1;w<=stop[r].Roadway_No;w++)
{
strcpy(aa,road[n1].Stop_Name[q]);
strcpy(bb,road[n2].Stop_Name[w]);
if(Find_Tow_Stop_Road(aa,bb)==1)//&&(strcmp(line5[o].Stop_2,aa)!=0 && strcmp(line5[o].Stop_3,bb)!=0))
{
sige1=0;
for(int p=1;p<=o;p++)
if(strcmp(aa,line5[p].Stop_2)==0 && strcmp(bb,line5[p].Stop_3)==0)
{
//printf("%d\n",o);
sige1=1;
break;
}
if(sige1==1)
continue;
for(m2=1;m2<=l;m2++)
{
line2[m2].Change_Amount=line[k-l+m2].Change_Amount;
line2[m2].Stop_Amount=line[k-l+m2].Stop_Amount;
strcpy(line2[m2].Stop_1,line[k-l+m2].Stop_1);
strcpy(line2[m2].Stop_2,line[k-l+m2].Stop_2);
strcpy(line2[m2].Way_1,line[k-l+m2].Way_1);
}
Find_Tow_Stop_Road(start,aa);
for(m1=1;m1<=l;m1++)
{
line1[m1].Change_Amount=line[k-l+m1].Change_Amount;
line1[m1].Stop_Amount=line[k-l+m1].Stop_Amount;
strcpy(line1[m1].Stop_1,line[k-l+m1].Stop_1);
strcpy(line1[m1].Stop_2,line[k-l+m1].Stop_2);
strcpy(line1[m1].Way_1,line[k-l+m1].Way_1);
}
Find_Tow_Stop_Road(bb,end);
for(m3=1;m3<=l;m3++)
{
line3[m3].Change_Amount=line[k-l+m3].Change_Amount;
line3[m3].Stop_Amount=line[k-l+m3].Stop_Amount;
strcpy(line3[m3].Stop_1,line[k-l+m3].Stop_1);
strcpy(line3[m3].Stop_2,line[k-l+m3].Stop_2);
strcpy(line3[m3].Way_1,line[k-l+m3].Way_1);
}
for(int t=1;t<m1;t++)
for(int y=1;y<m2;y++)
for(int h=1;h<m3;h++)
{
line5[++o].Change_Amount=line1[t].Change_Amount+line2[y].Change_Amount+line3[h].Change_Amount;
line5[o].Stop_Amount=line1[t].Stop_Amount+line2[y].Stop_Amount+line3[h].Stop_Amount;
strcpy(line5[o].Stop_1,line1[t].Stop_1);
strcpy(line5[o].Way_1,line1[t].Way_1);
strcpy(line5[o].Stop_2,line1[t].Stop_2);
strcpy(line5[o].Way_2,line2[y].Way_1);
strcpy(line5[o].Stop_3,line2[y].Stop_2);
strcpy(line5[o].Way_3,line3[h].Way_1);
strcpy(line5[o].Stop_4,line3[h].Stop_2);
}
}
}
}
}
}
ss1=line5[1].Stop_Amount*line5[1].Change_Amount;
//ss2=line5[1].Change_Amount;
for(int ii=2;ii<=o;ii++)
{
if(line5[ii].Stop_Amount*line5[ii].Change_Amount<=ss1)
{
ss1=line5[ii].Stop_Amount*line5[ii].Change_Amount;
//ss1=line5[ii].Stop_Amount;
}
}
// for(int jj=2;jj<=o;jj++)
// {
// if(line5[jj].Change_Amount<ss2)
// ss2=line5[jj].Change_Amount;
// }
int nn=0;
for(q=1;q<=o;q++)
if(line5[q].Stop_Amount*line5[q].Change_Amount<=ss1)
printf("\n第%d条最佳路径:换乘2次,花费%d元,路程%d站\nS%s-%s-S%s-%s-S%s-%s-S%s\n",++nn,line5[q].Change_Amount,line5[q].Stop_Amount,line5[q].Stop_1,line5[q].Way_1,line5[q].Stop_2,line5[q].Way_2,line5[q].Stop_3,line5[q].Way_3,line5[q].Stop_4);
//for(q=1;q<=o;q++)
// if(line5[q].Change_Amount<=ss2)
// printf("%d-%d_%s-%s-%s-%s-%s-%s-%s\n",line5[q].Change_Amount,line5[q].Stop_Amount,line5[q].Stop_1,line5[q].Way_1,line5[q].Stop_2,line5[q].Way_2,line5[q].Stop_3,line5[q].Way_3,line5[q].Stop_4);
ss2=nn;
}
}
if(ss2==0)
printf("◆对不起!没有查到结果!两次换乘无法到达!\n");
printf("按任意键结束!",ss2);
getchar();
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -