这是一个关于图的问题,请大家帮我看看错在哪里,帮忙改一下,谢谢`。。
#include<iostream.h>
#include<bitset>
using namespace std;
#define MAX 50
int n;
bool dfs(int a[][MAX],int x,int d,bitset<MAX> &visited)
{
if(d==n-1)
{
cout<<"能够找到一条连接所有边的简单路径:"<<endl;
cout<<x+1<<' ';
return true;
}
visited[x]=1;
for(int i=0;i<n;i++)
{
if(a[x][i]>0 && visited[i]==0)
{
if( dfs(a,i,d+1,visited) )
{
cout<<"->"<<x+1;
return true;
}
}
}
visited[x]=0;
return false;
}
bool dfs_bool_can(int a[][MAX],int x,const int &end,bitset<MAX> &visited)
{
if(x==end)
{
cout<<"能够找到一条连接这两个顶点的简单路径:"<<endl;
cout<<x+1<<' ';
return true;
}
visited[x]=1;
for(int i=0;i<n;i++)
{
if(a[x][i]>0 && visited[i]==0)
{
if( dfs_bool_can(a,i,end,visited) )
{
cout<<"->"<<x+1;
return true;
}
}
}
visited[x]=0;
return false;
}
int main()
{
// freopen("d:\\zny.in","r",stdin);
int a[MAX][MAX]; //a[i][j]<=0表示i和j没有边
cout<<"输入顶点的数目";
cin>>n;
cout<<"输入邻接矩阵";
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cin>>a[i][j];
}
for(i=0;i<n;i++) //从不同的点开始搜索;
{
bitset<MAX> visited(0);
if( dfs(a,i,0,visited) )
{
cout<<endl;
break;
}
}
if(i>=n) cout<<"没有找到这样一条路径"<<endl;
cout<<endl<<endl;
cout<<"输入想判断是否连通的两个顶点:";
int s,t;
cin>>s>>t;
bitset<MAX> visited(0);
if( dfs_bool_can(a,s-1,t-1,visited) )
{
cout<<endl;
}
else cout<<"没有找到能够连接"<<s<<"和"<<t<<"的一条路径"<<endl;
return 1;
}