POJ1154(DFS回溯)
来源:互联网 发布:用户登录sql注入 编辑:程序博客网 时间:2024/05/21 14:52
原题链接:http://poj.org/problem?id=1154
题意:给出一个棋盘,每个格子填上一个字母,从(0,0)开始走,不能走重复字母的格子,求最大能走多少个格子。
一. 先扯一会蛋:
最喜欢这种跟我水平差不多的题,看那种太难的看题解都看不懂好郁闷。这题是少有的题解都没看就AC的哟!
二. 解题思路:
从第一个格子开始深搜,上下左右判断好如果都不能走,保存最大值,回溯。第一次做这种高大上的题好开森!
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <cstdlib>using namespace std;char chess[21][21];int cou, temp = 1, R, C;bool mark[257];void dfs(int i, int j){ if(!(i-1 >= 0 && !mark[chess[i-1][j]]) && !(i+1 < R && !mark[chess[i+1][j]]) && !(j-1 >= 0 && !mark[chess[i][j-1]]) && !(j+1 < C && !mark[chess[i][j+1]]) ){ cou = cou>temp? cou:temp; return; } if(i-1 >= 0 && !mark[chess[i-1][j]]){ mark[chess[i-1][j]] = true; temp++; dfs(i-1, j); temp--; mark[chess[i-1][j]] = false; } if(i+1 < R && !mark[chess[i+1][j]]){ mark[chess[i+1][j]] = true; temp++; dfs(i+1, j); temp--; mark[chess[i+1][j]] = false; } if(j-1 >= 0 && !mark[chess[i][j-1]]){ mark[chess[i][j-1]] = true; temp++; dfs(i, j-1); temp--; mark[chess[i][j-1]] = false; } if(j+1 < C && !mark[chess[i][j+1]]){ mark[chess[i][j+1]] = true; temp++; dfs(i, j+1); temp--; mark[chess[i][j+1]] = false; }}int main(){ // freopen("in.txt", "r", stdin); int i, j; cin>>R>>C; for(i = 0; i < R; i++){ for(j = 0; j < C; j++){ cin>>chess[i][j]; } } mark[chess[0][0]] = true; dfs(0, 0); cout<<cou<<endl;}
0 0
- POJ1154(DFS回溯)
- poj1154解题报告(dfs)
- POJ2488 -- POJ1154-- DFS
- POJ1154--LETTERS(DFS)
- poj1154 dfs 深度搜索 集合
- poj1154(大水题)
- poj1154
- POJ1154
- POJ1154
- 1691(dfs + 回溯)
- 回溯法(DFS)
- HDU1015(dfs回溯)
- hdu4499 Cannon (DFS+回溯)
- 140 - Bandwidth(DFS+回溯)
- HDOJ1342 Lotto(DFS,回溯)
- HDOJ1015 Safecracker(DFS,回溯)
- POJ 1321 棋盘问题(DFS+回溯)
- dfs模板(回溯、四皇后)poj1321
- 2015年下半年总结
- 欢迎使用CSDN-markdown编辑器
- 【BZOJ3260】跳【组合数】
- Java国际化与spring框架国际化的处理
- node.js发送邮件email
- POJ1154(DFS回溯)
- HDU 5305 Friends(2015 Multi-University Training Contest 2)
- nyoj108 士兵杀敌(一) (线段树)
- mmap--最简单的测试程序(用户空间与内核空间数据交换&&用户态和内核态的数据交换用例)
- Linux内核和用户空间通信的方式(一)— proc文件和mmap共享内存
- bigfile表空间 smallfile表空间
- SCU 1118-上车人数(递推)
- ubuntu 下通过apt-get 安装jdk
- JavaScript 正则表达式