#include<string> #include<iostream> #include<fstream> using namespace std;
//void travel(int m1d[],int visited[],int i,int n);
void travel(int m1d[],int visited[],int i,int n) { cout<<i<<endl; visited[i]=true;
int **matrix=new int*[n]; for(int k=0; k<n; k++) matrix[k]=new int[n]; for(k=0; k<n; k++) for(int j=0; j<n; j++) matrix[k][j]=m1d[k+j]; //一维转二维
for(int j=0; j<n; j++) if(matrix[i][j]!=0&&!visited[j]) { for(k=0; k<n; k++) for(j=0; j<n; j++) m1d[k+j]=matrix[k][j]; //二维转一维 travel(m1d,visited,j,n); } for(k=0; k<n; k++) delete[] matrix[k]; delete[] matrix; }
void main() { int N,V;
//下面打开文件,C++方式打开 fstream file1; file1.open("E:\\travel.txt"); file1>>N>>V; //取到城市数和通道数 V*=2; //一条通道有两个城市
string *city=new string[N]; //动态申请数组,C++方式 string *route=new string[V];
for(int i=0;i<N;i++) file1>>city[i]; //先把单个城市名储存,string数组
int start=-1; //第一个起点 for(int j=0;j<V;j++) { file1>>route[j]; //路径,双数是前一个,单数是后一个 if(j%2==0&&start!=0) //判断如果起点航班存在 start=city[0].compare(route[j]); }
file1.close(); //关闭文件,C++方式 if(start!=0) //如果连起点航班都没有就退出,例如Vancouver存在 exit(0); //下面动态创建二维数组,C++方式 int **connect=new int*[N]; for(i=0; i<N; i++) connect[i]=new int[N];
//先给全部元素赋0值 for(i=0; i<N; i++) for(j=0;j<N;j++) connect[i][j]=0;
//下面循环是处理当遇到连通的两个地点,就赋1值 for(int k=0; k<V; k+=2) { for(i=0; i<N; i++) if(!(route[k].compare(city[i]))) break; for(j=0; j<N; j++) if(!(route[k+1].compare(city[j]))) break;
connect[i][j]=connect[j][i]=1; }
int *c1d=new int[N*N]; //没办法,搞个一维的数组储存二维
//先把图输出,看看正确否,输出的同时把值传给一维 for(i=0; i<N; i++) { for(j=0; j<N; j++) { cout<<connect[i][j]<<" "; c1d[i+j]=connect[i][j]; //二维转一维 } cout<<endl; }
int *visited=new int[N];
travel(c1d,visited,0,N); //传递一维的数组c1d
//清除刚才申请的内存,包括之前申请的字符串内存,C++方式 for(i=0; i<N; i++) delete[] connect[i]; delete[] connect; delete[] route; delete[] city; }