完整代码是这样的,怎么改?
#include<string>
#include<iostream>
#include<fstream>
using namespace std;
//void travel(int ***matrix,int visited[],int i,int n);
void travel(int *matrix[],int visited[],int i,int n)
{
cout<<i<<endl;
visited[i]=true;
for(int j=0; j<n; j++)
if(matrix[i][j]!=0&&!visited[j])
travel(matrix,visited,j,n);
}
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;
}
//先把图输出,看看正确否
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
cout<<connect[i][j]<<" ";
cout<<endl;
}
int *visited=new int[N];
travel(connect,visited,0,N);
//清除刚才申请的内存,包括之前申请的字符串内存,C++方式
for(i=0; i<N; i++)
delete[] connect[i];
delete[] connect;
delete[] route;
delete[] city;
}