poj1419——Graph Coloring(dfs)
2016-02-05 14:17
267 查看
Description
You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the graph and the only available colors are black and white. The coloring of the graph is called optimal if a maximum of nodes is black. The coloring is restricted by the rule that no two connected nodes may be black.
Figure 1: An optimal graph with three black nodes
Input
The graph is given as a set of nodes denoted by numbers 1…n, n <= 100, and a set of undirected edges denoted by pairs of node numbers (n1, n2), n1 != n2. The input file contains m graphs. The number m is given on the first line. The first line of each graph contains n and k, the number of nodes and the number of edges, respectively. The following k lines contain the edges given by a pair of node numbers, which are separated by a space.
Output
The output should consists of 2m lines, two lines for each graph found in the input file. The first line of should contain the maximum number of nodes that can be colored black in the graph. The second line should contain one possible optimal coloring. It is given by the list of black nodes, separated by a blank.
Sample Input
1
6 8
1 2
1 3
2 4
2 5
3 4
3 6
4 6
5 6
Sample Output
3
1 4 5
因为数据都不是很大,所以可以暴力直接搜索过
You are to write a program that tries to find an optimal coloring for a given graph. Colors are applied to the nodes of the graph and the only available colors are black and white. The coloring of the graph is called optimal if a maximum of nodes is black. The coloring is restricted by the rule that no two connected nodes may be black.
Figure 1: An optimal graph with three black nodes
Input
The graph is given as a set of nodes denoted by numbers 1…n, n <= 100, and a set of undirected edges denoted by pairs of node numbers (n1, n2), n1 != n2. The input file contains m graphs. The number m is given on the first line. The first line of each graph contains n and k, the number of nodes and the number of edges, respectively. The following k lines contain the edges given by a pair of node numbers, which are separated by a space.
Output
The output should consists of 2m lines, two lines for each graph found in the input file. The first line of should contain the maximum number of nodes that can be colored black in the graph. The second line should contain one possible optimal coloring. It is given by the list of black nodes, separated by a blank.
Sample Input
1
6 8
1 2
1 3
2 4
2 5
3 4
3 6
4 6
5 6
Sample Output
3
1 4 5
因为数据都不是很大,所以可以暴力直接搜索过
#include<iostream> #include<vector> #include<cstring> #include<cstdio> using namespace std; int map[110][110]; int color[110]; int tmp[110]; int len; int maxlen; int ind; int n,k; void DFS(int num) { int i; if(num==n) //当num==n,表示已经搜寻完毕 { if(len>maxlen) { maxlen=len; for(i=1,ind=0; i<=n; i++) if(color[i]) tmp[ind++]=i; } return ; } for(i=1; i<=n; i++) if(i!=num && map[i][num] && color[i]) //搜寻周围的点是否有被着色 break; if(i>n) //如果没有,则,i>n { color[num]=1; //进行着色 len++; DFS(num+1); //搜寻下一个点 color[num]=0; //不管是否能找到点,这个点都要变白,以便下一次搜寻 len--; } DFS(num+1); //另一次搜寻 } int main() { int t; int i; int x,y; scanf("%d",&t); while(t--) { memset(map,0,sizeof(map)); memset(color,0,sizeof(color)); len=maxlen=0; scanf("%d%d",&n,&k); while(k--) { scanf("%d%d",&x,&y); map[x][y]=map[y][x]=1; } DFS(1); printf("%d\n%d",maxlen,tmp[0]); for(i=1; i<maxlen; i++) printf(" %d",tmp[i]); printf("\n"); } return 0; }
相关文章推荐
- [转] 转载:一条网线,不用路由器,多台笔记本电脑共享上网
- 深入浅出Windows BATCH
- HDU 1028 (dp)
- poj1273 2010.2.17
- 固定导航(Sticky nav)
- C++暑期学习笔记
- 《HTTP权威指南》学习笔记——URL和资源
- Google protocol-buffers java版--简单使用
- iOS开发之苹果公司联系邮箱大全
- HDU 1018 big numbe
- 计算机网络的特点及性能
- win10、win7系统64位oracle11g安装教程以及32位plsql连接教程
- poj1221 2010.2.17
- 项目中遇到的问题
- 蓝桥杯学习记录-基础练习
- linux命令行下如何以目录树的形式显示一个文件夹的所有文件
- 通知:转移至简书
- PAT (Basic Level)1009. 说反话
- Angular-JS初见
- [转] AT指令(打电话与发短信)