dfs___刷题记录
poj 1564
给出一个s,n个数,输出所有的能够得到s的方案
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int a[];
int ans[];
int n,s,flag; void dfs(int x,int sum,int cnt){
if(sum > s) return;
if(sum == s){
flag = ;
printf("%d",ans[]);
for(int i = ;i < cnt;i++) printf("+%d",ans[i]);
printf("\n");
} for(int i = x;i < n;i++){
ans[cnt] = a[i];
dfs(i+,sum+a[i],cnt+);
while(i+ < n && a[i] == a[i+]) i++;
}
} int main(){
while(scanf("%d %d",&s,&n) != EOF && s){
for(int i = ;i < n;i++) scanf("%d",&a[i]);
printf("Sums of %d:\n",s);
flag = ;
dfs(,,);
if(!flag) printf("NONE\n");
}
return ;
}
poj 2488
骑士周游列国
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int res[][];
int vis[][]; int dir[][] = {-,-, -,, -,-, -,, ,-, ,, ,-, ,}; int m,n;
int flag; void dfs(int x,int y,int cnt){
if(flag) return;
res[cnt][] = x;res[cnt][] = y;
if(cnt == n*m) {
flag = ;
for(int i = ;i <= n*m;i++)
printf("%c%d",res[i][]-+'A',res[i][]);
printf("\n");
return;
} for(int i = ;i < ;i++){
int xx = x+ dir[i][];
int yy = y+ dir[i][];
if(!vis[xx][yy] && xx> && xx <= n && yy > && yy <= m){
vis[xx][yy] = ;
dfs(xx,yy,cnt+);
vis[xx][yy] = ;
}
}
} int main(){
int T;
scanf("%d",&T);
int kase = ;
while(T--){
scanf("%d %d",&m,&n); memset(vis,,sizeof(vis));
vis[][] = ; printf("Scenario #%d:\n",++kase);
flag = ;
dfs(,,); if(!flag) printf("impossible\n");
if(T) printf("\n"); }
return ;
}
poj 3009
这道题自己没有写出来
后来和题解比较了一下,这几个地方写错了
把障碍物击碎后的状态,先改成0搜一遍,等搜完还要再改回1,是为了搜到以后的所有情况
找到起点后,把起点改成0
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; const int INF = ;
int g[][];
int vis[][];
int n,m;
int sx,sy,ex,ey;
int flag,ans;
int dir[][] = {,,,,-,,,-}; int in(int x,int y){
if(x >= && x <= m && y >= && y <= n) return ;
return ;
} void dfs(int x,int y,int step){
if(step > ) return; int i,xx,yy;
for( i = ;i < ;i++){
xx = x+dir[i][];
yy = y+dir[i][]; if(step < ans && in(xx,yy) && g[xx][yy] != ){
while(g[xx][yy] == && in(xx,yy)){
xx +=dir[i][];
yy +=dir[i][];
}
int xx2 = xx-dir[i][];
int yy2 = yy-dir[i][];
if(in(xx,yy)){
if(g[xx][yy] == ){
ans = step+;
return;
}
if(g[xx][yy] == ){
g[xx][yy] = ;//碰到障碍物,将障碍物清除
dfs(xx2,yy2,step+);
g[xx][yy] = ;//这一次dfs完后改回来是为了遍历完以后的所有情况
}
}
}
}
} int main(){
while(scanf("%d %d",&n,&m) != EOF && (m+n)){//输入的是n行m列
memset(g,,sizeof(g));
for(int i = ;i <= m;i++){
for(int j = ;j <= n;j++){
scanf("%d",&g[i][j]);
if(g[i][j] == ) {
sx = i,sy = j;
g[i][j] = ;
}
}
} ans = ;
dfs(sx,sy,);
if(ans > ) printf("-1\n");
else printf("%d\n",ans);
}
return ;
}
poj 1321
给出棋盘,旗子摆放不能同行或者同列,问放k个有多少种办法
感觉和poj 1564有一点点像,搜行,看对应的列是否被占用
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long LL;
char g[][];
int vis[];
LL ans;
int n,k; void dfs(int x,int cnt){
if(cnt == k){
ans++;
// printf("ans = %d\n",ans);
return;
}
for(int i = x;i <= n;i++){
for(int j = ;j <= n;j++){
if(g[i][j] == '#' && !vis[j]){
vis[j] = ;
dfs(i+,cnt+);
vis[j] = ;
}
}
}
} int main(){
while(scanf("%d %d",&n,&k) != EOF){
if(n == - && k == -) break;
for(int i = ;i <= n;i++)
for(int j = ;j <= n;j++) cin>>g[i][j]; ans = ;
dfs(,);
printf("%I64d\n",ans);
}
return ;
}
uva 11396
给出一个无向图,再给出一个爪形,问这个无向图是否能够分成一个个爪形的单元
判断是否是二分图
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std; const int maxn = ;
vector<int> g[maxn];
int color[maxn];
int n; bool bipartite(int u){
for(int i = ;i < g[u].size();i++){
int v = g[u][i];
if(color[v] == color[u]) return false;
if(!color[v]) {
color[v] = -color[u];
if(!bipartite(v)) return false;
}
}
return true;
} int main(){
int u,v;
while(scanf("%d",&n) != EOF && n){
for(int i = ;i <= n;i++) g[i].clear();
while(scanf("%d %d",&u,&v) != EOF){
if(u == && v == ) break;
g[u].push_back(v);g[v].push_back(u);
}
memset(color,,sizeof(color));
color[] = ;
if(bipartite()) puts("YES");
else puts("NO");
}
return ;
}
dfs___刷题记录的更多相关文章
- PE刷题记录
PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...
- leetcode刷题记录--js
leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...
- Leetcode刷题记录(python3)
Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...
- 刷题记录:[HarekazeCTF2019]encode_and_encode
目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...
- 刷题记录:[De1CTF 2019]Giftbox && Comment
目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...
- 刷题记录:[强网杯 2019]Upload
目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...
- 刷题记录:[XNUCA2019Qualifier]EasyPHP
目录 刷题记录:[XNUCA2019Qualifier]EasyPHP 解法一 1.error_log结合log_errors自定义错误日志 2.include_path设置包含路径 3.php_va ...
- 刷题记录:[DDCTF 2019]homebrew event loop
目录 刷题记录:[DDCTF 2019]homebrew event loop 知识点 1.逻辑漏洞 2.flask session解密 总结 刷题记录:[DDCTF 2019]homebrew ev ...
- 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System
目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...
随机推荐
- python 整型,布尔值,字符串相关
1.整型(int) 就是所有整数, 2.布尔值(bool) True False 0,"",[],{},(),none为False 3.字符串(str) 字符: 是单一文字符号 字 ...
- Robot Framework(二)测试数据语法
2.1.1文件和目录 测试数据的层次结构安排如下: 测试数据在测试数据文件中创建. 测试数据文件会自动创建一个包含该文件中的测试数据的测试套件. 包含测试数据文件的目录构成了更高级别的测试套件.这样的 ...
- 洛谷P3807 【模板】卢卡斯定理_组合数学模板
Code: #include<cstdio> using namespace std; typedef long long LL; const int maxn=1000000+2; LL ...
- 【vue】v-if和v-show的区别
今天来捋一下vue中的v-if与v-show的区别 先来看一下vue官方文档对他们的解释 2.从实现方式来看: v-if是当依赖的值变为false时,直接让元素消失,html代码也会消失,相当于直接在 ...
- http协议的状态码(200,404,503)
http协议的状态码 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态码. 100(继续) 请求者应当继续提出请求.服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101( ...
- 【python正则】工作中常用的python正则代码
工作中常用的一些正则代码: 01.用户名正则 import re # 4到16位(字母,数字,下划线,减号)if re.match(r'^[a-zA-Z0-9_-]{4,16}$', "ab ...
- Sping面试题分析
1.开放中主要使用Spring的什么技术? (1)IOC容器管理各层的组件 (2) 使用AOP配置声明式事务 (3)整合其他框架 2简述AOP和IOC概念 AOP : Aspect Orienten ...
- ST Nucleo mbed套件开发 一 MBED环境使用 以Nucleo-F401为例 (二)
MBED环境.使用起来总是那么的别扭可能很多人不习惯用在线编程器,大多数做ST32开发的都比較喜欢KEIL或者IAR,有没有什么好的方法呢.我们能够本地编译MBEDproject, 答案是肯定了.下来 ...
- IntelliJ IDEA 对于generated source的处理
IntelliJ IDEA 对于generated source的处理 学习了:https://stackoverflow.com/questions/5170620/unable-to-use-in ...
- 一个关于Class的小点
public 是公有 private 是私有 没有写就是private