⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 new_file.cpp

📁 本程序实现的是南京的公交线路查询
💻 CPP
📖 第 1 页 / 共 5 页
字号:
																{
																	for(int pi13=0;pi13<stage[pi12].line_in;pi13++)
																	{
																		int tmp_ji7;
																		tmp_ji7=strcmp(zhongzhuan[zhongzhuan_counter].end_line,stage[pi12].biaoji[pi13].way);
																		if(tmp_ji7==0)
																		{
																			middle1=stage[pi12].biaoji[pi13].num;
																			
																			break;
																		}
																	}
																	
																	
																	break;
																}
																
															}
															zhongzhuan[zhongzhuan_counter].lu_cheng=abs(first-middle0)+abs(last-middle1);			
															///zhongzhuan[zhongzhuan_counter]=abs(bus_line[god0[pi4]])+abs();///经过的站数辆还没定
															zhongzhuan_counter++;/////中转站的数目变多
															
															
																			}
																		}
															}
															
															if(zhongzhuan_counter==0)goto lab_change3;
															///////////////////****得到了线路的交点****/////////////////////
															///////***想通过排序的方法得到路径由短到长的排列****////////
															///////**      交换两个zhongzhuan结构体的值           **///////
															for(int bee0=0;bee0<zhongzhuan_counter;bee0++)
																for(int bee1=0;bee1<zhongzhuan_counter;bee1++)
																	if(zhongzhuan[bee0].lu_cheng<zhongzhuan[bee1].lu_cheng)
																	{
																		
																		least.begin_id=zhongzhuan[bee0].begin_id;
																		strcpy(least.begin_line,zhongzhuan[bee0].begin_line);
																		least.end_id=zhongzhuan[bee0].end_id;
																		strcpy(least.end_line,zhongzhuan[bee0].end_line);
																		least.lu_cheng=zhongzhuan[bee0].lu_cheng;
																		strcpy(least.round,zhongzhuan[bee0].round);
																		
																		zhongzhuan[bee0].begin_id=zhongzhuan[bee1].begin_id;
																		strcpy(zhongzhuan[bee0].begin_line,zhongzhuan[bee1].begin_line);
																		zhongzhuan[bee0].end_id=zhongzhuan[bee1].end_id;
																		strcpy(zhongzhuan[bee0].end_line,zhongzhuan[bee1].end_line);
																		zhongzhuan[bee0].lu_cheng=zhongzhuan[bee1].lu_cheng;
																		strcpy(zhongzhuan[bee0].round,zhongzhuan[bee1].round);
																		
																		
																		zhongzhuan[bee1].begin_id=least.begin_id;
																		strcpy(zhongzhuan[bee1].begin_line,least.begin_line);
																		zhongzhuan[bee1].end_id=least.end_id;
																		strcpy(zhongzhuan[bee1].end_line,least.end_line);
																		zhongzhuan[bee1].lu_cheng=least.lu_cheng;
																		strcpy(zhongzhuan[bee1].round,least.round);
																		
																		
																		
																	}
																	////////***上面**///////
																	//	cout<<"达到了这一步"<<endl;
																	
																	for(int pi8=0;pi8<zhongzhuan_counter;pi8++)
																	{														
																		if(pi8==0)cout<<"没有直达车,需要转车"<<endl;
																		cout<<"第"<<pi8+1<<"种方法为: "<<"起点"<<zhongzhuan[pi8].begin_line<<"->到->"<<zhongzhuan[pi8].round<<"下车坐"<<zhongzhuan[pi8].end_line<<"到目的.  "<<"总的路程为"<<zhongzhuan[pi8].lu_cheng<<endl;
																	}
																	cout<<"提示:输入相应的乘车编号可以具体查看经过哪些站点,输入0退出"<<endl;
																	cin>>tishi;
																	if(tishi==0)break;////输入为0则跳出
																	int use_endl=0;/////用于输出回车符
																	///////////////////////////////////////////////////**以下的程序是实现各个站点的输出**///////////////////////////////////////////////////
																	
																	if(tishi<=zhongzhuan_counter)////输入的选择方案可以找到
																	{
																		int way_begin;////存放起始的站台在起始公交线的站数
																		int way_middle0;////存放中转站在起始公交线的站数
																		int way_middle1;////存放中转站在结束公交线的站数
																		int way_end;////存放终点在结束公交线路的站数
																		//////////寻找起点站在公交路线上的位置//////////
																		for(int self0=0;self0<=bus_line[zhongzhuan[tishi-1].begin_id].geshu;self0++)
																		{
																			
																			int weak0;
																			int weak1;
																			weak0=strcmp(input1,bus_line[zhongzhuan[tishi-1].begin_id].line[self0]);
																			weak1=strcmp(zhongzhuan[tishi-1].round,bus_line[zhongzhuan[tishi-1].begin_id].line[self0]);
																			if(weak0==0)way_begin=self0;/////如果找到与起点相同的站点,记录站数
																			
																			if(weak1==0)way_middle0=self0;////在起点线找到与中转相同的点,记录站数
																			
																			
																		}
																		for(int self1=0;self1<=bus_line[zhongzhuan[tishi-1].end_id].geshu;self1++)
																		{
																			
																			int weak2;
																			int weak3;
																			weak2=strcmp(input2,bus_line[zhongzhuan[tishi-1].end_id].line[self1]);
																			weak3=strcmp(zhongzhuan[tishi-1].round,bus_line[zhongzhuan[tishi-1].end_id].line[self1]);
																			if(weak2==0)way_end=self1;/////如果找到与起点相同的站点,记录站数
																			
																			if(weak3==0)way_middle1=self1;////在起点线找到与中转相同的点,记录站数
																			
																			
																		}
																		if(way_begin>=way_middle0)
																		{
																			cout<<"从起点站到中转站所坐的公交线为"<<zhongzhuan[tishi-1].begin_line<<"路,经过的各站点为:"<<endl;
																			cout<<endl;
																			for(int self2=way_begin;self2>=way_middle0;self2--)
																			{
																				
																				out_enter++;
																				if(out_enter%6==0)cout<<endl;////每8个站点一行输出
																				cout<<bus_line[zhongzhuan[tishi-1].begin_id].line[self2]<<" ->";
																				
																				
																			}
																			
																			
																			
																		}
																		else
																		{
																			cout<<"从起点站到中转站所坐的公交路线为"<<zhongzhuan[tishi-1].begin_line<<"路,经过的各站点为:"<<endl;
																			cout<<endl;
																			for(int self3=way_begin;self3<=way_middle0;self3++)
																			{
																				
																				out_enter++;
																				if(out_enter%6==0)cout<<endl;
																				cout<<bus_line[zhongzhuan[tishi-1].begin_id].line[self3]<<" ->";
																				
																				
																				
																			}
																		}
																		cout<<endl;
																		cout<<endl;
																		out_enter=0;
																		if(way_end>=way_middle1)
																		{
																			cout<<"从中转站到终点站所坐的公交路线为 "<<zhongzhuan[tishi-1].end_line<<"路,经过的各站点为:"<<endl;
																			//	cout<<endl;
																			for(int self4=way_middle1;self4<=way_end;self4++)
																			{
																				
																				out_enter++;
																				if(out_enter%6==0)cout<<endl;////每8个站点一行输出
																				cout<<bus_line[zhongzhuan[tishi-1].end_id].line[self4]<<" ->";
																				
																				
																			}
																			
																			
																			
																		}
																		else
																		{
																			cout<<"从中转站到终点站所坐的公交线路为 "<<zhongzhuan[tishi-1].end_line<<" 路,经过的各站点为:"<<endl;
																			//	cout<<endl;
																			for(int self5=way_middle1;self5>=way_end;self5--)
																			{
																				
																				out_enter++;
																				if(out_enter%6==0)cout<<endl;
																				cout<<bus_line[zhongzhuan[tishi-1].end_id].line[self5]<<" ->";
																				
																				
																				
																			}
																		}
																		
																		cout<<endl;																																							
																}
																else
																	cout<<"输入的选择方案有错误"<<endl;
																
																break;
					}	
					
lab_change3:		if(zhongzhuan_counter==0&&same_counter0==0)
					{
						cout<<"换乘一次车没有方案,只有换乘两次的情况"<<endl;
						///**以下一段程序的作用是将终点**////
						for(int pp0=0;pp0<stage[end_stage].line_in;pp0++)////////遍历所有经过这个站点的路线
						{
							for(int pp1=0;pp1<=bus_num;pp1++)
							{
								int tmp_use;
								tmp_use=strcmp(stage[end_stage].biaoji[pp0].way,bus_line[pp1].name);
								
								if(tmp_use==0)////寻找公交车号相同的,将经过的站台的存放到line_all2
								{
									for(int pp2=0;pp2<=bus_line[pp1].geshu;pp2++)
									{
										int tmp10;									
										for(int pp3=0;pp3<=cross_stage2;pp3++)///////查询是不是有重复的站点的进入,防止重复
										{
											tmp10=strcmp(bus_line[pp1].line[pp2],line_all2[pp3]);									
											if(tmp10==0)
											{
												enable_add2=0;
												break;
											}	
										}
										if(enable_add2==1)
										{
											strcpy(line_all2[cross_stage2],bus_line[pp1].line[pp2]);
											cross_stage2++;										
										}
										enable_add2=1;
										
									}								
								}
							}
							
						}
				//测试		cout<<"cross_stage2 的值为"<<cross_stage2<<endl;
				//测试		cout<<"cross_stage 的值为"<<cross_stage<<endl;
						
						/////**到此为止,已经将line_all2[1000][20]数组初始化完,即终点站所能到达的站点,下一步是line_all2数组所能达到的路线,存放在line_num2[200][20]数组里**/////					
						for(int jj0=0;jj0<cross_stage2;jj0++)
							for(int jj1=0;jj1<=stage_num;jj1++)
							{
								int we;
								we=strcmp(line_all2[jj0],stage[jj1].name);
								if(we==0)///相同的站点则将此站点所经过的路线值导入
								{
									for(int jj2=0;jj2<stage[jj1].line_in;jj2++)
									{
										for(int jj3=0;jj3<=line_num_flag2;jj3++)/////查询现有的line_num数组里是不是已经有相同的值
										{
											int tmp_ji1;
											tmp_ji1=strcmp(stage[jj1].biaoji[jj2].way,line_num2[jj3]);
											if(tmp_ji1==0)
											{
												line_num_enable2=0;
												break;
											}										
										}			
										if(line_num_enable2==1)/////允许计入到数组
										{
											strcpy(line_num2[line_num_flag2],stage[jj1].biaoji[jj2].way);
											line_num_flag2++;										
										}
										line_num_enable2=1;
									}
								}							
							}
							//测试用到的代码cout<<"得到的line_num_flag2的值为"<<line_num_flag2<<endl;
							
							//测试用到的代码 cout<<"得到的line_num_flag的值为"<<line_num_flag<<endl;
							
							//						for(int qp0=0;qp0<line_num_flag;qp0++)
							//							cout<<qp0<<"经过起点的转乘公交路线为"<<line_num[qp0]<<endl;
							//						for(int qp1=0;qp1<line_num_flag2;qp1++)
							//							cout<<qp1<<"经过终点的转乘公交路线为"<<line_num2[qp1]<<endl;
							////**到现在为止,已经得到了可以从终点转乘车辆的公交线路号,存放在line_num2[200][20]里,数量为line_num_flag2**////
							///**在上面已经得到了从起点出发的公交线路号,存放在line_num[200][20]里,数量为line_num_flag**///
							char same2_middle[500][20];/////存放的是第一道转车到第二道转车的路线
							int same2_middle_flag=0;//////第一道转车到第二道转车的方案的个数
							int same2_middle_enable=1;////使用的原因是防止相同的公交线路进入这个same2_middle数组里
							
//							char same2_first[200][20];/////起始站到第一道转车的路线
							int same2_first_flag=0;/////起始站到第一道转车的方案个数
							int same2_first_enable=1;////防止相同的公交线路进入这个数组same2_first[200][20]
							
//							char same2_end[200][20];////第二道转车到终点的公交路线
							int same2_end_flag=0;/////第二道转车到终点的可选方案的个数
							int same2_end_enable=1;////防止相同的公交线路进入这个数组same2_end[200][20]
							
							for(int xz1=0;xz1<line_num_flag;xz1++)
								for(int xz2=0;xz2<line_num_flag2;xz2++)
								{
									int tmp_use;
									tmp_use=strcmp(line_num[xz1],line_num2[xz2]);
									if(tmp_use==0)/////如果两个中转的路线集合之间有交集
									{
										for(int xz3=0;xz3<same2_middle_flag;xz3++)////本层循环的作用是在已经建立好的数组中看是否有重复的公交路线进入
										{
											
											int tmp_cjc;
											tmp_cjc=strcmp(line_num[xz1],same2_middle[xz3]);
											if(tmp_cjc==0)////如果有,则应该禁止加入
											{
												same2_middle_enable=0;
												break;
											}
											
										}
										if(same2_middle_enable==1)
										{
											strcpy(same2_middle[same2_middle_flag],line_num[xz1]);
											same2_middle_flag++;
										}
										same2_middle_enable=1;////为下一次的加入作准备
									}
									
								}
					//测试			cout<<"same2_middle_flag的值为"<<same2_middle_flag<<endl;
								

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -