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

图着色问题(回溯)

题目描述

给定无向连通图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

http://www.xdnf.cn/news/12237.html

相关文章:

  • Redux:不可变数据与纯函数的艺术
  • Windows和Ubuntu双系统,删除Windows
  • 用WPDRRC模型,构建企业安全防线
  • 使用Java实现M3U8视频文件合并的完整指南
  • openGauss数据库备份与恢复实践
  • 口语考试准备part1(西电)
  • Python制作史莱姆桌面宠物!可爱的
  • Apollo Auto:Cyber RT 与 ROS 通信
  • 攻防世界RE-happyctf
  • 对话式AI文本转语音合成软件CSM整合包,Sesame AI Labs多人文字转语音工具
  • CUDA安装与多版本管理
  • 算法训练第九天
  • 无法下载CUDA,下载界面链接打开异常
  • 永磁同步电机无感观测器与在线参数识别分别是什么,区别与联系是什么
  • [科研理论]机器人路径规划算法总结及fast_planner经典算法解读
  • Python6.5打卡(day37)
  • HSL颜色控制及使用示例(Hue-Saturation-Lightness)
  • 整合swagger,以及Knife4j优化界面
  • 【机械视觉】Halcon—【七、blob阈值分割】
  • nginx 同时支持ipv4与ipv6 配置
  • SLG游戏分析
  • Seata 分布式事务 AT 模式
  • IP如何挑?2025年海外专线IP如何购买?
  • python打卡day45@浙大疏锦行
  • Vehicle HAL(5)--vhal 实现设置属性的流程
  • Silicon EFR32xG22 错误问题和解决办法汇总
  • Linux目录结构
  • ROS2里面与话题 /move_base_simple/goal 和 /move_base/status 相对应的话题名字及其含义
  • 整理几个概念:DCU DTK HIP hipcc ROCm LLVM Triton MIGraphX 怎么增加GStreamer插件
  • 可穿戴设备:健康监测的未来之眼