【dfs爆搜】poj 1129 Channel Allocation

article/2025/8/28 16:16:12

1129 -- Channel Allocation (poj.org)

题意:

大致的题意就是给你一张图,给这张图染色,最多能染多少种颜色

思路:

首先要构造状态图,构造完状态图之后对其进行搜索(注意是先有图再有的dfs,而不是边dfs边构图,这个是观念的变化)

我们考虑一个状态图的顶点为一个染色方案

类似于这样,这是状态图的一个顶点

  

 一开始的顶点里面的图是一个都没染色的,然后从起点开始转移出去26条边,深度为1的点里面的图是一个点染成26种颜色的情况

这样我们脑子里的图就构造好了,我们去在这个状态图里面dfs,dfs的深度就是顶点里的图已经被染色的点的个数,所以出口就是dep>n

然后对于状态图的一个顶点,我们去枚举状态图的顶点中的图的其中一个顶点的颜色,并用数组标记(注意在状态图里的顶点可能是乱序遍历到的,即有可能是东染一个,西染一个,这个由题目给出的图本身决定

枚举颜色后,我们去check这个颜色是否合法,那只需要遍历这个点相邻的点,看有没有相邻点的颜色相同,若存在颜色相同的点就不合法

我的写法就是用链式前向星存题目里给出的图

Code:

#include <stdio.h>
#define max(a,b) (a>b?a:b)
using namespace std;
const int mxn=30,mxe=1e3+10;
int n,tot=0,ans=-1;
int head[mxn],c[mxn];
struct ty{int to,next;
}edge[mxe<<1];
void add(int u,int v){edge[tot].to=v;edge[tot].next=head[u];head[u]=tot++;
}
void init(){tot=0;ans=-1;for(int i=0;i<=n;i++){head[i]=-1;c[i]=0;}
}
bool check(int u){for(int i=head[u];~i;i=edge[i].next){if(c[edge[i].to]==c[u]) return false;}return true;
}
bool dfs(int dep){if(dep>n) return true;for(int i=1;i<=26;i++){c[dep]=i;if(check(dep)){if(dfs(dep+1)) return true;}c[dep]=0;}return false;
}
int main(){while(scanf("%d",&n)==1&&n){init();getchar();for(int i=1;i<=n;i++){getchar();getchar();char ch;while(ch=getchar()){if(ch=='\n') break;add(i,ch-'A'+1);}}dfs(1);for(int i=1;i<=n;i++) ans=max(ans,c[i]);if(ans==1) printf("%d channel needed.\n",ans);else printf("%d channels needed.\n",ans);}return 0;
}

总结:

1.在搜索之前,先想好我们需要构造的状态图,想好状态图之后再去写代码会好想很多

2.一个方案作为一个状态图的顶点很常见


http://chatgpt.dhexx.cn/article/K2UccDUm.shtml

相关文章

#1121

#1121 水题&#xff0c;巧妙暴力&#xff0c;拒绝强行暴力导致TLE&#xff1b; 找条件 你好&#xff01; 这是你第一次使用 *Markdown编辑器 #include #include #include #include #include #include #include #include #include #include #include #include #inc…

Java-1129

Java8 新特性 速度更快代码更少&#xff08;lambda、stream&#xff09;强大的Stream API便于并行最大化减少空指针异常Optional 速度更快&#xff1a;对底层数据结构哈希map的优化 解释说明hashmap基本原理 hashmap本质是一个长度16的数组元素的键值对以key&#xff1a;valu…

如何用管理员权限打开CMD(快捷键)

近期给电脑重新装了win10系统&#xff0c;在使用cmd时发现执行一些命令提示我权限不够&#xff0c;需要管理员权限&#xff0c;有两种常用方法可以使用管理员权限打开cmd命令行&#xff1a; 第一种&#xff1a;搜索cmd应用&#xff0c;然后点击以管理员身份运行 第二种&#x…

Windows | 管理员权限打开CMD 快捷键

大家打开CMD一般用windows R&#xff0c;然后在运行框中输入cmd&#xff0c;接着Enter就好啦。 有时候安装啥东西需要管理员权限&#xff0c;运气不好&#xff0c;需要多次使用&#xff0c;每次操作都相比较麻烦&#xff0c;于是找了快捷键。 解决方法 和打开普通权限的CMD…

如何快速进入/打开cmd--快捷键

Windows系统快速进入cmd 1.WinR(win键在键盘左下角,ctrl和alt中间是个图标) 2.如何在一个目录内快速进入cmd? 2.1进入想要进入的目录 2.2直接在地址栏输入cmd 2.3回车即可进入cmd 3.在运行里面敲cmd也可进入 4.按住SHIFT鼠标右键可以在任意目录进入cmd 别忘了选择在此处打开…

cmd暂停快捷键_是否有键盘快捷键可以暂停正在运行的CMD窗口的输出?

cmd暂停快捷键 When running a batch script, you may need or want to pause the output in the CMD window so that you can look things over. Is there an easy way to pause, then restart the output? Today’s SuperUser Q&A post has the answer to help with a r…

cmd 实用快捷键。。

我相信大家用cmd时会感到很憋手蹩脚的。。什么CtrlC,CtrlV&#xff0c;都不能用。只能通过点击上面的边框通过编辑-->粘贴实现。其实并不需要这么做&#xff0c;在这里首先介绍几个简单的操作&#xff1a; 1.在cmd上点击右键&#xff0c;选中属性&#xff0c;在编辑选项中的…

【windows小技巧】快速以管理员的方式启动CMD窗口and使用快捷键启动管理员CMD窗口

启动CMD窗口想必很简单&#xff0c;大家都会&#xff0c;以管理员的方式启动CMD窗口&#xff0c;虽说有点麻烦&#xff0c;但是也不难。以上这两种方式还是有点麻烦&#xff0c;能不能直接快捷键一按就直接启动 【管理员&#xff1a;命令提示符】窗口呢&#xff1f; 一、具体操…

Win10 CMD命令大全与超好用的快捷键

一、Windows CMD 命令大全 按组合键 Win(Windows图标键)R 键打开运行窗口&#xff0c;输入“cmd”按回车即可打开cmd命令提示符 在窗口右击选择属性可进行个性化设置~ 1.calc&#xff1a;启动计算器2.appwiz.cpl&#xff1a;程序和功能3.certmgr.msc&#xff1a;证书管理实用…

windows里面cmd命令窗口常用快捷键命令

按组合键 Win(Windows图标键)R 键打开运行窗口&#xff0c;输入“cmd”按回车即可打开cmd命令提示符 1.calc&#xff1a;启动计算器 2.control&#xff1a;控制面版3.dvdplay&#xff1a;DVD播放器 4.explorer&#xff1a;打开资源管理器 5.Firewall.cpl&#xff1a;Win…

Windows快捷键使用和打开CMD的方式

Windows常用快捷键 Ctrl C : 复制 Ctrl V : 粘贴 Ctrl A &#xff1a;全选 Ctrl X &#xff1a;剪切 Ctrl Z &#xff1a;撤销 Alt F4 : 关闭窗口 Shift delete : 永久删除 Win R : 打开运行框 Win E : 打开我的电脑 Ctrl Shift esc &#xff1a;打开任务管理…

Windows常用快捷键和常用的cmd命令(亲测用了办公效率提升明显)

文章目录 Widows常用快捷键常用的运行窗口命令大全常用的cmd命令 Widows常用快捷键 Win D &#xff1a;回到桌面&#xff08;Win M也可以实现回到桌面&#xff0c;不过Win D 可以快速回到桌面&#xff0c;再按一次又能回到原网页&#xff0c;这是WinM做不到的。&#xff09;…

cmd命令快捷键

一、如何打开运行界面 1、直接使用快捷键WINR打开 2、在开始菜单的所有程序面板中找到“运行” 二、命令提示窗口使用技巧 1、自定义命令提示符的颜色     默认状况下&#xff0c;命令提示符是黑底白字显示的&#xff0c;要更改这两者的颜色其实非常简单&#xff0c;点…

教你用快捷键 以管理员身份运行cmd

方法一 系统自带的快捷键 WinR&#xff0c;打开运行&#xff0c;输入 cmd 按快捷键 ctrl shift enter 弹出的窗口点击是&#xff0c;即可以管理员身份运行cmd 方法二 自定义快捷键 打开win10自带的搜索&#xff0c;输入cmd 右键打开文件位置&#xff0c;找到命令提示符…

Windows上常用的32个cmd命令和26个常用快捷键

一.首先介绍一下&#xff1a;Windows 命令提示符&#xff08;即 cmd&#xff09;是 Windows 系统的一种命令行操作工具&#xff0c;用户可以通过输入命令来完成各种各样的系统或程序操作。 二.打开CMD命令提示窗口的方法 1.开始菜单 -> Windows 系统 -> 命令提示符 2.点…

cmd命令窗口快捷键与小技巧

一、常用快捷键&#xff1a; 1.F1&#xff1a;按F1一次&#xff0c;命令提示符向后切换到已经执行过的命令字符。如果已经是最后的一条的命令&#xff0c;则不进行任何切换操作。 例子&#xff1a;之前输入“node”&#xff0c;按F1一次后自动输入n&#xff0c;按两次自动输入o…

matlab解矩阵方程组

题意如下&#xff1a; 解方程组 对于一个初学者来说&#xff0c;刚上来是这样做的 然后不出意外报错了 后来根据课件想到了matlab中求逆矩阵的函数 inv&#xff08;A&#xff09;&#xff1b; 瞬间豁然开朗 所以说还是蛮简单的 做个笔记&#xff1a; ps&#xff1a;&#…

matlab解整数方程,用matlab怎样解方程组的整数解

共回答了18个问题采纳率&#xff1a;83.3% 程序&#xff1a; clear; clc; %abcde10 %290a470b720c1060d1490e6000 e0 floor(6000/1490); d0 floor(6000/1060); c0 floor(6000/720); index 0; cxd zeros(10,5); for cxde 0:e0 for cxdd 0:d0 for cxdc 0:c0 for cxdb 0:…

MATLAB求解方程和方程组

声明&#xff1a;本文章中数据来自清风老师数学建模课程 文章目录 MATLAB求解方程和方程组1、solve函数1.1 求解单变量方程1.2 多变量方程求解1.3 方程组的求解1.4 solve求解时可能出现的问题 2、vpasolve函数2.1 vapsolve的使用2.2 vpasolve解决一个更复杂的例子 三、fsolve函…

matlab 条件方程组的解,solve 时解方程组的限制条件问题

本帖最后由 oldlybaby 于 2017-5-28 14:43 编辑 简单来说&#xff0c;需要求解a1,a2,a3,但只有两个关于a1,a2,a3的方程f1,f2&#xff0c;附加条件是a1a2a3最小&#xff0c;请问怎么求解方程组&#xff0c;我的程序(方程有点长)如下 syms a1 a2 a3 ;复制代码 f1cos(a3)*(10*sin(…