📄 luxian12.txt
字号:
#include "stdio.h"
#define MAX 14
#define MOV 100
/*----------首个城市----------*/
typedef struct city /* 路线数据类型 */
{
char code; /* 线路代码 */
}line;
line ks1;
typedef struct traffic /* 交通信息数据类型 */
{char code; /*路线代码 */
int dist; /* 站点间的里程 */
int p1;
int p2;
int p3;
int p4; /* 出发时刻 */
}traffic;
traffic ks2;
typedef struct traf
{int flag;/*标志*/
char code;/*站点*/
char rcode;/*目的站点*/
int gtime;/*出发时间*/
int ttime;/*选择的路线时间*/
int utime;/*消耗时间*/
int udata;/*出发天序数*/
int time[4];/*发车时间*/
int road;
struct traf *next;
}traf;
traf *h[14],*t,*p,*q,*m,*n;
typedef struct st /* 栈结构 */
{char code;
int road;
int ttime;
int gtime;
int utime;
int udata;
}info;
typedef struct stk
{info *s;
int top;
}stk;
/*-输入路线和交通并存放于站点中-*/
inputcall()
{
FILE *fp;
int a,b,i,j;
clrscr();
if((fp=fopen("stu_list","w+"))==NULL){printf("can not open");return;}
printf("\nplease input all stop name:");
scanf("%d",&a);
fputc(a,fp);
for(j=0;j<a;j++)
{
printf("\nplease input OK %d zhandian:",j+1);
scanf("%s",&ks1.code);
fwrite(&ks1,sizeof(struct zhandian),1,fp);
printf("\nplease input other zhandian:");
scanf("%d",&b);
fputc(b,fp);
for(i=0;i<b;i++)
{printf("\nplease input other city like (a 1000 11 12 13 14):");
scanf("%s %d %d %d %d %d",&ks2.code,&ks2.dist,&ks2.p1,
&ks2.p2,&ks2.p3,&ks2.p4);
fwrite(&ks2,sizeof(struct traffic),1,fp);
}
clrscr();
}
fclose(fp);
}
/*--------------------------*/
/*-----打开文件构建交通-----*/
usetraffic()
{FILE *fp;
int a,b,i,j;
if((fp=fopen("stu_list","rb"))==NULL){printf("can not open");return;}
a=fgetc(fp);
for(j=0;j<a;j++)
{
fread(&ks1,sizeof(struct zhandian),1,fp);
m=(traf*)malloc(sizeof(traf));
h[j]=m;h[j]->code=ks1.code;h[j]->rcode='';h[j]->flag=0;
h[j]->gtime=0;h[j]->utime=100;
b=fgetc(fp);
for(i=0;i<b;i++)
{
fread(&ks2,sizeof(struct traffic),1,fp);
n=(traf*)malloc(sizeof(traf));
n->code=ks2.code;n->road=ks2.dist;n->time[0]=ks2.p1;
n->time[1]=ks2.p2;n->time[2]=ks2.p3;n->time[3]=ks2.p4;
m->next=n;m=m->next;
}
m->next=NULL;
}
fclose(fp);
}
/*--------------------------*/
/*------查找出发的站点------*/
search(char zhandian,int time)
{int i;
for(i=0;i<=30;i++)
{if(h[i]->code==city){h[i]->flag=1;h[i]->udata=0;
h[i]->gtime=time;h[i]->utime=0;break;
}/*出发的站点初始化*/
}
}
/*--------------------------*/
/*------查找经过的站点------*/
searchtraf()
{int i,z=0;
for(i=0;i<=30;i++)
{
if(h[i]->flag==1){p=t=h[i];h[i]->flag=0;z=1;break;}
}
return(z);
}
/*--------------------------*/
/*----------q指向-----------*/
pcode()
{int i;
for(i=0;i<=30;i++)
{if(h[i]->code==p->next->code){q=h[i];break;}
}
}
/*--------------------------*/
/*-----计算所需要的时间-----*/
sohutime()
{
int i,y=0;
int wtime,rtime,ttime,gotime,udata,thistime,thisutime,thisdata;
for(i=0;i<=3;i++)
{if(p->next->time[i]>=t->gtime){
wtime=p->next->time[i]-t->gtime;
rtime=p->next->road/MOV;udata=t->udata;
ttime=p->next->time[i];y=1;
break;}
}
if(y==0){wtime=24-t->gtime+p->next->time[0];ttime=p->next->time[0];
rtime=p->next->road/MOV;udata=t->udata+1;
}
thistime=ttime+rtime;
if(thistime>=24){udata=udata+1;thistime=thistime-24;}
thisutime=t->utime+wtime+rtime;
thisdata=udata;
if(thisutime<q->utime){q->rcode=t->code;q->utime=thisutime;
q->gtime=thistime;q->udata=thisdata;
q->ttime=ttime;q->road=p->next->road;q->flag=1;}
}
/*--------------------------*/
/*---------输出结果---------*/
infoprint(char gcy,char tcy)
{stk s1;
int i,j;
char ch;
char str[20];
s1.s=(info*)malloc(sizeof(info));
s1.top=-1;
clrscr();
while(gcy!=tcy)
{
for(i=0;i<=13;i++)
{
if(h[i]->code==tcy){s1.top++;s1.s[s1.top].code=h[i]->code;s1.s[s1.top].gtime=h[i]->gtime;
s1.s[s1.top].utime=h[i]->utime;s1.s[s1.top].udata=h[i]->udata;
s1.s[s1.top].ttime=h[i]->ttime;s1.s[s1.top].road=h[i]->road;tcy=h[i]->rcode;break;}
}
}
for(i=0;i<=13;i++)
{if(h[i]->code==gcy){
s1.top++;s1.s[s1.top].code=h[i]->code;s1.s[s1.top].gtime=h[i]->gtime;
s1.s[s1.top].utime=h[i]->utime;s1.s[s1.top].udata=h[i]->udata;
s1.s[s1.top].ttime=h[i]->ttime;s1.s[s1.top].road=h[i]->road;break;}
}
j=s1.top;
for(i=s1.top;i>=0;i--)
{ch=s1.s[i].code;
switch(ch)
{
case '1': sprintf(str,"大学城总站");break;
case '2': sprintf(str,"广大");break;
case '3': sprintf(str,"广大生活区");break;
case '4': sprintf(str,"广大公寓");break;
case '5': sprintf(str,"广美生活区");break;
case '6': sprintf(str,"中环西站");break;
case '7': sprintf(str,"广工");break;
case '8': sprintf(str,"综合商业南区");break;
case '9': sprintf(str,"华工");break;
case '10': sprintf(str,"华工生活区");break;
case '11': sprintf(str,"广中医广药");break;
case '12': sprintf(str,"广外");break;
case '13': sprintf(str,"中环东路");break;
case '14': sprintf(str,"中大");break;
case '15': sprintf(str,"综合商业北区");break;
case '16': sprintf(str,"星海学院");break;
case '17': sprintf(str,"华师");break;
case '18': sprintf(str,"大学城总站");break;
}
if(i==j)printf("\ntime:<%d> from <%s> go ",s1.s[i].gtime,str);
else printf("\nnumber:<%d> day on time:<%d> plane to <%s> for <%d>M time:%d in it",s1.s[i].udata+1,s1.s[i].ttime,str,s1.s[i].road,s1.s[i].gtime);
}
printf("\nall use <%d> time",s1.s[0].utime);
printf("\n....Press any key to exit...");
getch();
}
/*--------------------------*/
/*---------交通连接---------*/
chickport()
{int a;
char gcity,tcity;
int gtime;
clrscr();/*清屏*/
usetraffic();/*调用文件操作函数*/
printf("\n....please input go city....:");
gcity=getche();
getch();
printf("\n....please input to city....:");
tcity=getche();
getch();
printf("\n....please input go time....:");
scanf("%d",>ime);
search(gcity,gtime);/*调用函数查找出发站点的位置*/
while(searchtraf()==1)/*调用函数检验经过的站点*/
{
while(p->next)
{pcode();
sohutime();/*调用函数进行最短时间的计算*/
p=p->next;
}
}
infoprint(gcity,tcity);/*调用函数输出结果*/
}
/*--------------------------*/
/*---------调用菜单---------*/
printfcall()
{
char ch;
clrscr();
printf("\n........please input you edit........");
printf("\n..word:('a':input city or edit city)('other word':traffic) \n");
printf("\n..please input..:");
ch=getche();
getch();
if(ch=='a')inputcall();
chickport();
}
/*-------------------------*/
main()
{printfcall();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -