POJ1321-Chess Problem(dfs基础题)
2018-03-09 13:07
169 查看
题意:
中文题干,不多说了.
解题思路:
基础dfs.dfs思路其实很简单,就是走到走不了了以后,就回退一步,然后重新搜索.
用bool chess[9][9]标记哪些可以走,用col[9]标记哪些列走过了,从第一行往下搜.
代码用递归的实现的,初学的时候,看代码都比较费劲,这个时候就需要自己手动模拟一遍,模拟完了以后,就都明白了.
下面上我的手动模拟过程(太乱...勿介意....就是为了让大家自己去模拟做个垃圾示范....
接下来上代码,初学的话,需要手打一遍代码,然后手动模拟一遍,这样基本就领会dfs大概代码思路了.#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
bool chess[9][9]; //标记哪些点能走
bool col[9]; //标记哪几列走过了
int n,k,status; //status:可行方案
void dfs(int row,int num)
{
if(num == k)
{
status++;
return;
}
if(row > n)
return;
for(int i = 1;i <= n;i++)
{
if(!col[i] && chess[row][i])
{
col[i] = true; //标记走过了
dfs(row+1,num+1); //跳到下一行
col[i] = false; //取消标记
}
}
dfs(row+1,num); //没有取点到下一行
return;
}
int main()
{
int j,i;
while(cin>>n>>k)
{
memset(chess,false,sizeof(chess));
memset(col,false,sizeof(col)); //初始化
status = 0;
if(n == -1 && k == -1)
break;
for(i = 1;i <= n;i++)
{
for(j = 1;j <= n;j++)
{
char a;
cin>>a;
if(a == '#')
chess[i][j] = true;
}
}
dfs(1,0);
cout<<status<<endl;
}
return 0;
}
中文题干,不多说了.
解题思路:
基础dfs.dfs思路其实很简单,就是走到走不了了以后,就回退一步,然后重新搜索.
用bool chess[9][9]标记哪些可以走,用col[9]标记哪些列走过了,从第一行往下搜.
代码用递归的实现的,初学的时候,看代码都比较费劲,这个时候就需要自己手动模拟一遍,模拟完了以后,就都明白了.
下面上我的手动模拟过程(太乱...勿介意....就是为了让大家自己去模拟做个垃圾示范....
接下来上代码,初学的话,需要手打一遍代码,然后手动模拟一遍,这样基本就领会dfs大概代码思路了.#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
bool chess[9][9]; //标记哪些点能走
bool col[9]; //标记哪几列走过了
int n,k,status; //status:可行方案
void dfs(int row,int num)
{
if(num == k)
{
status++;
return;
}
if(row > n)
return;
for(int i = 1;i <= n;i++)
{
if(!col[i] && chess[row][i])
{
col[i] = true; //标记走过了
dfs(row+1,num+1); //跳到下一行
col[i] = false; //取消标记
}
}
dfs(row+1,num); //没有取点到下一行
return;
}
int main()
{
int j,i;
while(cin>>n>>k)
{
memset(chess,false,sizeof(chess));
memset(col,false,sizeof(col)); //初始化
status = 0;
if(n == -1 && k == -1)
break;
for(i = 1;i <= n;i++)
{
for(j = 1;j <= n;j++)
{
char a;
cin>>a;
if(a == '#')
chess[i][j] = true;
}
}
dfs(1,0);
cout<<status<<endl;
}
return 0;
}
相关文章推荐
- POJ 1321 Chess Problem 基础DFS
- POJ 1321 基础搜索 DFS 二
- POJ训练计划1321_棋盘问题(DFS)
- DFS POJ 1321
- DFS-POJ-1321-棋盘问题
- POJ1321 棋盘问题(dfs)
- POJ 1321-棋盘问题(DFS 递归)
- POJ 1321 棋盘问题(DFS)
- POJ 1985 Cow Marathon 求直径 DFS基础 和 BFS 基础
- POJ 1321 棋盘问题(dfs八皇后变形)
- poj1321 棋盘问题(深搜dfs)
- POJ 1321 - 棋盘问题(DFS)
- poj 2386 DFS搜索基础
- POJ1321 棋盘问题 dfs
- POJ 1321 DFS
- poj 1321 :棋盘问题 (dfs)
- POJ1321(DFS深搜)
- poj1321--棋盘问题(DFS)
- poj 1321 棋盘问题 dfs 回溯
- poj dfs相关之1321 棋盘问题