【HDOJ 1045】Fire Net--dfs
来源:互联网 发布:佳能mp288软件下载 编辑:程序博客网 时间:2024/06/04 18:54
【HDOJ 1045】Fire Net
图题 可用dfs也可用二分图最大匹配 这里先上DFS做法 用了两个思路 一开始手残卡了半天……发现是回溯过程中把一个临时数组打乱了 无法还原 后来放在dfs函数内过了。。。
代码如下:
版本1:
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <queue>using namespace std;char mp[5][6];bool vis[5][5];int n;int dfs(int x,int step){ int i,j,m,k,l,ls[5][5];//需要开在dfs内 m = step; for(i = x; i < n; ++i) for(j = 0; j < n; ++j) { if(mp[i][j] == 'X' || vis[i][j]) continue; for(k = 0; k < n; ++k) for(l = 0; l < n; ++l) ls[k][l] = vis[k][l]; for(k = j; k < n && mp[i][k] != 'X'; ++k) vis[i][k] = 1; for(k = j; k >= 0 && mp[i][k] != 'X'; --k) vis[i][k] = 1; for(k = i; k < n && mp[k][j] != 'X'; ++k) vis[k][j] = 1; for(k = i; k >= 0 && mp[k][j] != 'X'; --k) vis[k][j] = 1; m = max(m,dfs(i,step+1)); for(k = 0; k < n; ++k) for(l = 0; l < n; ++l) vis[k][l] = ls[k][l]; } return m;}int main(){ int i; while(~scanf("%d",&n) && n) { for(i = 0; i < n; ++i) scanf("%s",mp[i]); memset(vis,0,sizeof(vis)); printf("%d\n",dfs(0,0)); } return 0;}
版本2:
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <queue>using namespace std;char mp[5][6];int n;bool can(int i,int j){ int k,l; for(k = j+1; k < n && mp[i][k] != 'X'; ++k) if(mp[i][k] == '*') return 0; for(k = j-1; k >= 0 && mp[i][k] != 'X'; --k) if(mp[i][k] == '*') return 0; for(k = i+1; k < n && mp[k][j] != 'X'; ++k) if(mp[k][j] == '*') return 0; for(k = i-1; k >= 0 && mp[k][j] != 'X'; --k) if(mp[k][j] == '*') return 0; return 1;}int dfs(int x,int step){ int i,j,m,f; m = step; for(i = x; i < n; ++i) for(j = 0; j < n; ++j) { f = 1; if(mp[i][j] == 'X' || mp[i][j] == '*') continue; mp[i][j] = '*'; if(!can(i,j)) { mp[i][j] = '.'; continue; } m = max(m,dfs(i,step+1)); mp[i][j] = '.'; } return m;}int main(){ int i; while(~scanf("%d",&n) && n) { for(i = 0; i < n; ++i) scanf("%s",mp[i]); printf("%d\n",dfs(0,0)); } return 0;}
0 0
- hdoj 1045 Fire Net 【DFS】
- 【HDOJ 1045】Fire Net--dfs
- hdoj 1045 Fire Net(DFS)
- hdoj 1045 Fire Net 【dfs】
- hdoj 1045 Fire Net (dfs)
- HDOJ 题目1045 Fire Net(dfs)
- HDOJ Fire Net 1045【DFS+回溯】
- HDOJ 1045 Fire Net(DFS)
- hdoj 1045 Fire Net(dfs)
- HDOJ(HDU).1045 Fire Net (DFS)
- hdoj 1045 Fire Net (dfs or 匈牙利)
- hdoj 1045 Fire Net 【DFS n皇后变形】 【二分图】
- ACM--DFS--最大碉堡数--HDOJ 1045--Fire Net
- HDOJ 1045 Fire Net
- HDOJ 1045 Fire Net
- hdoj 1045 Fire Net
- HDOJ 1045 Fire Net
- hdoj-1045-Fire Net
- vi快捷键使用
- Leetcode NO.226 Invert Binary Tree
- windows 10预览版升级win10 7月29 10240.16384
- bootstrap读书笔记---未完待续
- 黑马程序员--Java--IO流
- 【HDOJ 1045】Fire Net--dfs
- 06 JAVA 容器
- 检测wifi是否需要portal验证 公共场所wifi验证
- #238 (div.2) A. Gravity Flip
- hadoop单机环境配置
- HDU 1076 An Easy Task
- 深度学习 caffe 建自己的数据库 训练一个自创卷积神经网络 过程总结
- 一款很漂亮的CSS3登录界面
- 编码之痛(下)一个文件的旅行