POJ 1321 棋盘问题
2012-08-31 15:21
381 查看
大意:给你一张棋盘,给你一定的棋子,空白区域不能放,问最多可能有几种方法。
思路:典型的搜索题目。
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
const int SIZE = 80;
int v[SIZE];
char maze[SIZE][SIZE];
int n, k;
int cnt;
void dfs(int r, int num)
{
if(num == k)
{
cnt++;
return ;
}
if(r > n) return ;
for(int i = 0; i < n; i++)
{
if(!v[i] && maze[r][i] == '#')
{
v[i] = 1;
dfs(r+1, num+1);
v[i] = 0;
}
}
dfs(r+1, num); //r列没有摆棋子。
}
int main()
{
while(~scanf("%d%d", &n, &k))
{
if(n == -1 && k == -1) break;
for(int i = 0; i < n; i++)
{
scanf("%s", maze[i]);
}
memset(v, 0, sizeof(v));
cnt = 0;
dfs(0, 0);
printf("%d\n", cnt);
}
return 0;
}
思路:典型的搜索题目。
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
const int SIZE = 80;
int v[SIZE];
char maze[SIZE][SIZE];
int n, k;
int cnt;
void dfs(int r, int num)
{
if(num == k)
{
cnt++;
return ;
}
if(r > n) return ;
for(int i = 0; i < n; i++)
{
if(!v[i] && maze[r][i] == '#')
{
v[i] = 1;
dfs(r+1, num+1);
v[i] = 0;
}
}
dfs(r+1, num); //r列没有摆棋子。
}
int main()
{
while(~scanf("%d%d", &n, &k))
{
if(n == -1 && k == -1) break;
for(int i = 0; i < n; i++)
{
scanf("%s", maze[i]);
}
memset(v, 0, sizeof(v));
cnt = 0;
dfs(0, 0);
printf("%d\n", cnt);
}
return 0;
}
相关文章推荐
- POJ 1321 棋盘问题
- POJ 1321 棋盘问题
- poj_1321 棋盘问题
- POJ1321_棋盘问题_深搜
- poj 1321 棋盘问题(暴力DFS)
- POJ - 1321棋盘问题(dfs)
- POJ-1321-棋盘问题(搜索)
- POJ 1321 棋盘问题(dfs)
- POJ 1321 棋盘问题(暴力dfs or DP)
- POJ - 1321 棋盘问题 n皇后问题(二进制版本)
- POJ 1321 - 棋盘问题
- POJ 1321 *** 棋盘问题
- POJ 1321 棋盘问题
- POJ 1321-棋盘问题 简单搜索DFS
- POJ 1321 棋盘问题 简单递归
- POJ 1321 棋盘问题(状态压缩DP | DFS)
- POJ 1321.棋盘问题
- POJ1321 棋盘问题(dfs)
- poj 1321 棋盘问题 (简单的DFS)
- POJ 1321 棋盘问题