当前位置: 首页 > news >正文

图着色问题(回溯)

题目描述

给定无向连通图G=(V, E),该图有n个顶点,e条边。用m种颜色对G中的顶点着色,使得任意两个相邻顶点着色不同。输出着色后的所有可能的结果。

输入

第一行三个整数,分别表示n,e 和 m 的值。1<=n,m<=10。
下面e行,每行二个整数,表示边的两个顶点,顶点编号为0,1,2,...,n-1。

输出

如果能用m种颜色着色,输出染色后的所有可能的结果(输出顺序见样例);否则输出No solution。

样例输入 Copy
4 5 3
0 1
0 3
1 2
1 3
2 3
样例输出 Copy
1 2 1 3
1 3 1 2
2 1 2 3
2 3 2 1
3 1 3 2
3 2 3 1
#include<bits/stdc++.h>
using namespace std;
int n,e,m;
vector<vector<int>> G;
vector<int>col;
vector<vector<int>> res;
bool valid(int u,int c)
{for(int i=0;i<G[u].size();i++){if(col[G[u][i]]==c){return false;}}return true;
}
void solve(int u)
{if(u==n){res.push_back(col);return;}for(int c=1;c<=m;c++){if(valid(u,c)){col[u]=c;solve(u+1);col[u]=0;		}}	}
int main ()
{cin>>n>>e>>m;G.resize(n);col.resize(n,0);for(int i=0;i<e;i++){int u,v;cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}solve(0);if(res.empty()){cout<<"No solution"<<endl;}else{for(int i=0;i<res.size();i++){for(int j=0;j<n;j++){cout<<res[i][j]<<(j<n-1?" ":"\n");}}}return 0;
}
//by crtzk7

相关文章:

  • Redisson简明教程—你家的锁芯该换了
  • 【连接器专题】案例:从可靠性测试报告来看SD卡座测试都需要用到哪些仪器
  • Github Copilot新特性:Copilot Spaces-成为某个主题的专家
  • [大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
  • [蓝桥杯]修改数组
  • 28. Revit API:尺寸标注(Dimension)
  • 线程的基础知识
  • 8天Python从入门到精通【itheima】-69~70(字符串的常见定义和操作+案例练习)
  • rocketmq延迟消息的底层原理浅析
  • Vue 中组件命名与引用
  • Qt 开发中的父类与父对象的区别和父对象传递:如何选择 `QWidget` 或 `QObject`?
  • python爬虫:grequests的详细使用(基于gevent和requests的异步HTTP请求库)
  • 009-libb64 迅速上手 libb64 -C++开源库108杰
  • 欧拉公式简明推导
  • 如何通过ETLCloud实现跨系统数据同步?
  • 【持续更新】c++指针相关试题
  • STM32入门教程——OLED调试工具
  • 核心机制:延时应答,捎带应答,面向字节流
  • nginx.conf配置详解:从(413 Request Entity Too Large)说起
  • RPG22.处理武器碰撞
  • 跨境电子商务网页制作与网站建设/站长网站查询
  • 动态网站系统是什么/搜索引擎优化的英语简称
  • 批发网站怎么做/web网页
  • 网站jianshe/app营销策略都有哪些
  • 网站建设排行榜/媒体推广
  • 怎么用python做网站/朋友圈产品推广文案