回答 (1)
#include<stdio.h>#include<malloc.h>#include<string.h>typedef struct port{ char name[2];} Port;typedef struct route{ int size; Port ports[20];} Route;Route routes[10];int n;int stackRoute[3],sp;Port stackPort[3];bool isHave;void show(){ int i; printf("\n方案\n"); for(i=0;i<sp;i++) printf("乘%d路 在%s下车\n",stackRoute[i],stackPort[i].name);}bool search(char a[],char b[],int d){ int i,j; for(i=0;i<n;i++) { for(j=0;j<sp;j++) { if(i+1==stackRoute[j]) break; } if(j>=sp) { for(j=0;j<routes[i].size;j++) { if(strcmp(routes[i].ports[j].name,a)==0) break; } if(d==0) { for(j++;j<routes[i].size;j++) { if(strcmp(routes[i].ports[j].name,b)==0) { isHave=true; stackRoute[sp]=i+1; stackPort[sp]=routes[i].ports[j]; sp++; show(); sp--; } } } else { for(j++;j<routes[i].size;j++) { stackRoute[sp]=i+1; stackPort[sp]=routes[i].ports[j]; sp++; search(routes[i].ports[j].name,b,d-1); sp--; } } } } return isHave;}int main(){ int i,j; char a[2],b[2]; printf("请输入共有多少条路线: "); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入%d路所经过站的总数: ",i+1); scanf("%d",&routes[i].size); getchar(); printf("为%d路输入每一个站的名字(一个字母): ",i+1); for(j=0;j<routes[i].size;j++) { scanf("%s",routes[i].ports[j].name); } } while(1) { printf("\n输入要查询的两站: "); scanf("%s %s",a,b); isHave=false; for(i=0;i<3;i++) { sp=0; if(search(a,b,i)) break; } if(i>=3) printf("没有适合的路线\n"); } return 0;}/*67a e d t u x z3d k m5l e o t k6k b c n m y3y u i7p a n y c q op t*/匆匆忙忙写完的,应该没什么问题/*...*/中为测试数据(你自己也可以照着编),今天没时间了,明天给你加注释.
评论 (2)
非常感谢您的详细建议!我很喜欢。
不错的回答我认为你可以在仔细的回答一下
分享你的回答
提问者
相关问题
母亲节特惠:花束买一送一
精选花束,为母亲送上最温馨的祝福