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

📄 qq1d.cpp

📁 本程序是用C++编写的公交换成解答
💻 CPP
字号:
#include<iostream.h>
#include<fstream.h>

void main()
{
	
	ifstream infile("busroute1.txt");
	if (!infile)
	  cout<<"open error"<<endl;

	float data[522*2][100];
	for(int p1=0;p1<522*2;p1++)
		for(int q1=0;q1<100;q1++)
			data[p1][q1]=0;
		data[0][0]=1;//线路号

	char a1,b1;
	int i1=0;
	int j1=1;

	do 
	{
		infile>>a1;
		while(a1!='S')
			infile>>a1;
		while(a1=='S')
		{
		
		infile>>data[i1][j1];
		j1++;
		infile>>b1;
		infile>>a1;
		};
		i1++;
		j1=1;
		
		if(a1=='E'||b1=='E')
			break;
		if(a1=='L'||b1=='L')
		{
			data[i1][0]=data[i1-1][0]+1;//路线号
//			for(int r=0;r<j;r++)
//			{data[i][r]=data[i-1][j-r-1];}
//			i++; 
			continue;
		}
		else
		{
			data[i1][0]=data[i1-1][0];
			int n1=0;
			for(;n1<3;n1++)
			{infile>>b1;}
			b1='L';
		}
				
	}
	while(a1=='L'||b1=='L');
	//cout<<i1<<endl;

	
	//for(int k=0;k<i;k++)//                 输出
	//	for(int l=0;l<100;l++)
	//		outfile<<data[k][l]<<endl;
	infile.close();
	//outfile.close();
	
	int d_data[522*2][100];
	for(p1=0;p1<522*2;p1++)
		for(int q1=0;q1<100;q1++)
			d_data[p1][q1]=0;

	  int k1=0;
	while(k1<i1)
	{
		if(data[k1][0]==data[k1+1][0])
		{
			for(int l=0;l<99;l++)
			{
				d_data[int(2*data[k1][0]-2)][l]=data[k1][l+1];
				d_data[int(2*data[k1][0]-1)][l]=data[k1+1][l+1];
			}
			k1++;
			k1++;
		}
		else
		{
			for(int l=0;l<99;l++)
				d_data[int(2*data[k1][0]-2)][l]=data[k1][l+1];
			int w1=1;
			while(data[k1][w1]!=0)
				++w1;
			for(l=0;l<w1;l++)
				d_data[int(2*data[k1][0]-1)][l]=data[k1][w1-l-1];
			k1++;
				
		}
	}
	/*for( k1=0;k1<522*2;k1++)//                 输出
		for(int l=0;l<100;l++)
			coutfile<<d_data[k1][l]<<endl;
	coutfile.close();*/


	//int a[2][5]=;
	//int	b[2][5]={};
	/*int d_data[4][10]={1,2,3,4,5,22,23,0,0,0,
		         10,1,11,12,13,56,78,0,0,0,
		  16,6,11,5,9,0,0,0,0,0,
		  6,7,3,8,18,0,0,0,0,0};*/

	int aa,bb;
	int lenth1,lenth2,lenth,minlenth=100;
	//int line,ge;
	int i,j,x,w=0;
	int p11[100],p2[100];
	

	ofstream coutfile("result.txt",ios::out);
	if(!coutfile)
		cout<<"open error!"<<endl;

	cout<<"input the start point:";
	cin>>aa;
	cout<<"input the end   point:";
	cin>>bb;
    //cout<<a[1]<<endl;
	
	bool two=false;
	int zhidaxian=0;
	int r=0,s=0;                       //算出A、 B集合
	int name1[80];                     // 路线号
	int name2[80];
	int num1[80];                       //站点序号                      
	int num2[80];
	for(int t=0;t<80;t++)
	{
		name1[t]=0;
		name2[t]=0;
	}
	//int u[1040][100];
	/*int *name1;
		name1=new int[];
	int *name2;
		name2=new int[];*/
	for(int p=0;p<1044;p++)              //上行和下行路线总数
	{
		for(int q=0;q<100;q++)            //站点序号
		{
			
			if(d_data[p][q]==aa) 
			{
				name1[r]=p;
			//	cout<<"q="<<q<<endl;
				num1[r]=q;
				r=r+1;
			}
			if(d_data[p][q]==bb)
			{
				name2[s]=p;
				//cout<<"name2[s]"<<name2[s]<<endl;
				//cout<<"p="<<p<<endl;
				//cout<<"q="<<q<<endl;
				//cout<<"s="<<s<<endl;
				num2[s]=q;
				s=s+1;
			}
		}
	}
	for(i=0;i<r;i++)                    //找出任意A B 集合中两个数组
		{
			//cout<<"there"<<endl;
			//cout<<"i="<<i<<endl;
		for(j=0;j<s;j++)
			{
				//cout<<"here"<<endl;
				//cout<<"j="<<j<<endl;
				for(int z=0;z<100;z++)               //取出任意2条线
				{
					//cout<<"z="<<z<<endl;
					//cout<<"qiu"<<endl;
					//cout<<"ok!"<<endl;
					p11[z]=d_data[name1[i]][z];
					//cout<<a[i][k]<<endl;
					//cout<<"name2[j]="<<name2[j]<<endl;
					p2[z]=d_data[name2[j]][z];
					//cout<<" * "<<u[name2[j]][z];
				}
				if(name1[i]==name2[j]&&num1[i]<=num2[j])
				{
					zhidaxian=name1[i];
					cout<<name1[i]<<"="<<name2[j]<<endl;
					cout<<num1[i]<<"to"<<num2[j]<<endl;
					lenth=num2[j]-num1[i];
					coutfile<<"lenth="<<lenth<<"minlenth="<<minlenth<<endl;
					cout<<"lenth="<<lenth<<"minlenth="<<minlenth<<endl;
					if(lenth<minlenth)
					{
						minlenth=lenth;
					}
					coutfile<<name1[i]/2+1<<"路车:";		
					cout<<name1[i]/2+1<<"路车:";
					for(int d=num1[i];d<=num2[j];d++)
					{
					   coutfile<<d_data[name1[i]] [d]<<"->";
					   cout<<d_data[name1[i]] [d]<<"->";
					}
					coutfile<<"end(直达)"<<endl;
					cout<<"end(直达d)"<<endl;
				}
				else
				{
					//cout<<"hehe"<<endl;
					//cout<<"num1[i]="<<num1[i]<<endl;
					//cout<<"num2[j]="<<num2[j]<<endl;
					for(int m=num1[i]+1;m<100;m++)                //找出公共站点
						{
							for(int n=0;n<num2[j];n++)
							{
								if(p11[m]==p2[n]) 
								{
									//cout<<"%%%%%%%%%%%%%%%%%%"<<name1[i]<<endl;
									//cout<<p2[n]<<endl;
									//cout<<"n="<<n<<endl;
									lenth1=m-num1[i];             //计算第一段长度
									lenth2=num2[j]-n;              // 计算第二段长度
									lenth=lenth1+lenth2;
										for(x=num1[i];x<=m;x++)           
										{
											//cout<<x<<"!"<<end;
											//coutfile<<p11[x]<<"->";
											//cout<<p11[x]<<"->";
											if(p11[x]==p2[num2[j]])
												two=true;
										}	
									if(lenth<=minlenth)
									{
										coutfile<<"lenth="<<lenth<<endl;
										cout<<"lenth*="<<lenth<<"<"<<"minlenth="<<minlenth<<endl;
										minlenth=lenth;
										coutfile<<name1[i]/2+1<<"路车:";
										cout<<name1[i]/2+1<<"路车&:";
										for(x=num1[i];x<=m;x++)           //输出路线
										{
											//cout<<x<<"!"<<end;
											coutfile<<p11[x]<<"->";
											cout<<p11[x]<<"->";
										}	
										coutfile<<"(转 "<<name2[j]/2+1<<"路车:) ";
										cout<<"(转 "<<name2[j]/2+1<<"路车*:) ";
										for(x=n;x<=num2[j];x++)
										{
											//cout<<"j="<<j<<endl;
											//cout<<name2[j]<<"!"<<endl;
											cout<<p2[x]<<"->";
											coutfile<<p2[x]<<"->";
										}
										coutfile<<"end"<<endl;
										cout<<"end"<<endl;
									}
								}
							}
						}
				}
			}	
		}
	coutfile.close();
}

⌨️ 快捷键说明

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