博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 1002 Fire Net(dfs)
阅读量:5325 次
发布时间:2019-06-14

本文共 1428 字,大约阅读时间需要 4 分钟。

嗯...

 

题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364501

 

这道题是想出来则是一道很简单的dfs:

将一个4*4的地图给每一个点排序,如下图:

0  1  2  3

4  5  6  7

8  9  10  11

12 13 14 15

 

设一个点为第k个点,那么它的坐标为(k/n,k%n),根据这个进行dfs,当k == n * n是退出dfs。如果k < n *n,就继续dfs,判断是否能放下,即要放的这个点为空地并且横、纵上都没有东西,最后注意回溯。

 

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 int n, ans; 8 char g[5][5]; 9 10 inline bool canput(int x, int y){11 for(int i = x - 1; i >= 0 && g[i][y] != 'X'; i--){12 if(g[i][y] == 'O') return 0;13 }14 for(int i = y - 1; i >= 0 && g[x][i] != 'X'; i--){15 if(g[x][i] == 'O') return 0;16 }17 return 1;18 }19 20 inline void dfs(int k, int cnt){21 int x, y;22 if(k == n * n){23 if(cnt > ans) ans = cnt;24 return;25 }26 else{27 x = k / n;28 y = k % n;29 if(g[x][y] == '.' && canput(x, y)){30 g[x][y] = 'O';31 dfs(k + 1, cnt + 1);32 g[x][y] = '.';33 }34 dfs(k + 1, cnt);35 }36 }37 38 int main(){39 while(~scanf("%d", &n) && n){40 ans = 0;41 for(int i = 0; i < n; i++){42 for(int j = 0; j < n; j++){43 cin >> g[i][j];44 }45 }46 dfs(0, 0);47 printf("%d\n", ans);48 }49 return 0;50 }
AC代码

 

转载于:https://www.cnblogs.com/New-ljx/p/11515316.html

你可能感兴趣的文章
Awesome Adb——一份超全超详细的 ADB 用法大全
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
Android 将drawable下的图片转换成bitmap、Drawable
查看>>
介绍Win7 win8 上Java环境的配置
查看>>
移动、联通和电信,哪家的宽带好,看完你就知道该怎么选了!
查看>>
Linux设置环境变量的方法
查看>>
构建自己的项目管理方案
查看>>
利用pca分析fmri的生理噪声
查看>>
div水平居中且垂直居中
查看>>
epoll使用具体解释(精髓)
查看>>
AndroidArchitecture
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
大数据学习
查看>>
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
Objective-C 【关于导入类(@class 和 #import的区别)】
查看>>
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
【转】javascript 中的很多有用的东西
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>