使用至多4种颜色给多区域着色问题
来源:互联网 发布:java数据字典怎么写 编辑:程序博客网 时间:2024/06/14 19:51
因为时间问题,没有详细描述算法思路。
#include "stdio.h"//4种颜色着N个区域//使用无向连通图表示区域,邻接矩阵存储图信息--因为偷懒,并没建立对应的数据结构 #define N 9int adj[N][N]={{0,1,0,1,0,0,0,0,0}, {1,0,1,1,1,1,0,0,0}, {0,1,0,0,1,1,0,0,0}, {1,1,0,0,1,0,1,1,0}, {1,1,1,1,0,1,1,1,1}, {0,1,1,0,1,0,0,1,1}, {0,0,0,1,1,0,0,1,0}, {0,0,0,1,1,1,1,0,1}, {0,0,0,0,1,1,0,1,0}};//打印一种着色方案 int printOneMethord(){int color[]={1,2,3,4};int a[N]={0,0,0,0,0,0,0,0,0};//记录9个区域颜色 int i,j,k=0,r;//k为已着色区域while(k<9) {r=0;//记录颜色值,从第一个颜色开始 a[k]=color[r];for(j=0;j<9&&r<4;){if(adj[k][j]&&a[j]){//如果是相邻区域,并且该区域已经着色 if(a[j]==a[k]){// 如果相邻区域颜色与当前此区域颜色相同 a[k]=color[++r];//换一种颜色 j=0;//从第一个相邻区域从新匹配 }else{j++;//颜色不同,匹配下一个区域 } }else{j++;}}if(r==4){printf("着色失败!\n");return 0;}k++;}for(i=0;i<9;i++){printf("%4d",a[i]);}}int check(int i,int j,int adj[][9],int a[]){//判断在i点着j颜色是否ok,adj为图矩阵,a为区域着色的记录for(int k=0;k<9;k++) {if(adj[i][k]&&a[k]){if(a[k]==j){return 0;}}}return 1;}int a[9]={0,0,0,0,0,0,0,0,0};/***打印所有的着色方案*/void search(int adj[][9],int i){if(i==9){for(int j=0;j<9;j++){printf("%4d",a[j]);}printf("\n");}else{for(int k=1;k<=4;k++){if(check(i,k,adj,a)){a[i]=k;search(adj,i+1);a[i]=0;//**************回溯**********************}}}}int main(){search(adj,0);}
阅读全文
0 0
- 使用至多4种颜色给多区域着色问题
- 有如图所示的七巧板,试设计算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互补相同,打印输出所有可能的涂色方案。
- 用n种颜色给正方体着色共用多少种不同的着色方案
- 对给定的区域图找出所有可能的不超过四种颜色的着色方案
- 如何给eCharts饼图区域指定颜色
- Android学习-----DrawableCompat(给Drawable 着色)的使用
- 着色问题
- 上传图片至多服务器,图片共享问题
- 给 man pages 着色
- Cocos 给精灵着色
- D3D中的颜色和着色
- Linux 终端颜色,界面着色
- opengl es 颜色和着色
- Geogebra里给带有曲线和直线混合边界的封闭区域填充颜色
- 给图的顶点着色
- ChemBioDraw 如何给文本着色
- 中国区域地图颜色
- C#调用两个至多个USB摄像头的问题
- 实现一个自己的react-redux
- 浅谈Arrays.asList()方法的使用
- Dubbo分布式日志追踪,多线程不能获取窜ID和IP问题
- PKU 1016 Numbers That Count
- ROS学习笔记5 启动文件
- 使用至多4种颜色给多区域着色问题
- FFmpeg swr_convert 音频重采样,编码的噪音问题
- Spring之SpringMVC(四)
- python try...except....else...finally处理异常
- 远程登录工具----telnet、openssh
- 队列知识点详解(数据结构,严慧敏版)
- pandas快速入门
- 6.18
- 阿里巴巴Java开发规约插件的使用