uva193继续回溯!!

来源:互联网 发布:软件界面图片素材 编辑:程序博客网 时间:2024/05/21 16:56

简单的回溯问题,如果是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;}


原创粉丝点击