简单的回溯问题,如果是PE的话很可能是最后一个后面还输出了空格
加了一个count判断输出了几个数了,等于Max时就是最后一个节点,不要输出空格,输出换行即可。
转载请注明出处,谢谢!
http://blog.csdn.net/monkeyduck
#include<iostream>
#include<cstring>
using namespace std;
int m,n,k,Max,vis[105],result[105];
bool graph[105][105];
void dfs(int cur,int black)
{
int i;
if (cur==n){
if (black>Max)
{
Max=black;
memcpy(result,vis,sizeof(vis));
}
}
else
{
vis[cur]=1; //尝试将第cur个节点涂上黑色
bool ok=1;
for (i=0;i<cur;i++)
{
if (vis[i]&&graph[cur][i])
{
ok=0;
break;
}
}
if (ok)
dfs(cur+1,black+1);
vis[cur]=0;
dfs(cur+1,black);
}
}
int main()
{
cin>>m;
while (m--)
{
cin>>n>>k;
memset(graph,0,sizeof(graph));
for (int i=0;i<k;i++)
{
int a,b;
cin>>a>>b;
graph[a-1][b-1]=graph[b-1][a-1]=1;
}
memset(vis,0,sizeof(vis));
memset(result,0,sizeof(result));
Max=0;
dfs(0,0);
cout<<Max<<endl;
int count=1;
for (int i=0;i<n;i++)
{
if (result[i]==1&&count!=Max)
{ cout<<i+1<<" ";
count++;
}
else if (result[i]==1&&count==Max)
{
cout<<i+1<<endl;
}
}
}
return 0;
}