题目在http://acm.pku.edu.cn/JudgeOnline/problem?id=1321
steve同学用java写了这道题老是runtime error,我让他把数组开大点,说结果还是runtime error,于是我写了一下,结果ac了,后来他用c++写也ac了。
这个题就是回溯法,和八皇后类似。
/**
*Author fuliang
*poj 1321
*/
#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 9;
char board[MAX][MAX];//记录棋盘状态
bool placed_c[MAX];//记录一列是否已经放过棋子
int count;//放棋子的方案数
int num_p;//已放棋子数目
int n,k;//棋盘n*n,放的棋子数k
/*
*是否可以放棋子
*/
bool can_place(int i,int j){
return !placed_c[j] && board[i][j] == '#';
}
/*
*深搜/回溯
*/
void DFS(int i){
if(num_p == k){
count++;
return;
}
if(i >= n)
return;
int j;
for(j = 0; j < n; j++){
if(can_place(i,j)){
placed_c[j] = true;
num_p++;
DFS(i+1);
placed_c[j] = false;
num_p--;
}
}
DFS(i+1);//i行不放棋子
}
int main(){
int i,j;
while(cin >> n >> k, k != -1){
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
cin >> board[i][j];
count = 0;
num_p = 0;
memset(placed_c,false,sizeof(placed_c));
DFS(0);
cout << count << endl;
}
return 0;
}
分享到:
相关推荐
"POJ1321棋盘问题" POJ1321棋盘问题是一种经典的回溯法问题,目的是在一个给定的棋盘形状上摆放k个棋子,使得任意两个棋子不能放在同一行或者同一列。该问题可以通过回溯法来解决。 问题描述: 在一个给定的棋盘...
【标签】"POJ 1321 Chess Problem" 进一步强调了这是一道与棋盘游戏相关的算法题目,POJ编号1321是该问题在系统中的唯一标识,方便参赛者查找和提交代码。 【文件列表】: 1. "POJ1321-Chess Problem.cpp":这是一...
"Flip Game" 是一个二人博弈类问题,玩家轮流操作,每次可以选择棋盘上任意一行或一列的一个方格进行翻转,使得该方格和其相邻的同色方格全部变为另一种颜色。游戏的目标是通过有限次翻转使棋盘上所有方格变为指定...
在 POJ 百练 题目分类中,简单计算类题目包括鸡兔同笼(2750)、棋盘上的距离(1657)、校门外的树(2808)、填词(2801)、装箱问题(1017)、平均年龄(2714)、数字求和(2796)、两倍(2807)、肿瘤面积(2713)...
【标签】"POJ 1027 The Same Game"指明了这个问题在POJ平台上的编号和名称,方便参赛者搜索和讨论。 【文件名称列表】 - "POJ1027-The Same Game.cpp":这是C++语言编写的源代码文件,包含了AC代码的实现。代码中...
对于“方向模板法”,这可能是一种特定的搜索策略,可能是针对特定问题的优化,例如在二维数组或矩阵中移动时,按照特定的方向(如右、下、左、上)进行搜索,或者在棋盘类问题中,沿着特定的棋步方向进行探索。...
【北大POJ2243Knight Moves】是一个典型的图论问题,主要涉及到国际象棋中的马(Knight)的移动规则以及最短路径的计算。在国际象棋中,马每一步可以向前后各跳两格,然后横向或纵向跳一格,形成一个“L”形的移动...
10. **回溯法与剪枝**:用于解决约束满足问题,如八皇后问题、N皇后问题、棋盘覆盖问题等。 在解决POJ1005这个问题时,参赛者需要结合题目给出的具体要求,选择合适的算法和数据结构,编写高效、正确的程序。同时,...
题目要求解决的是一个典型的图论问题,即在国际象棋棋盘上,骑士能否通过特定步数到达所有位置至少一次,即实现骑士的全访问路径。在这个问题中,我们需要理解并应用以下几个关键知识点: 1. **骑士移动规则**:在...
棋盘分割问题通常涉及将一个棋盘分割成若干个小区域,要求每个小区域满足一定的条件。可以通过动态规划定义状态`dp[i][j]`表示分割到第`i`行第`j`列时的方案数或最小代价。 ##### 6. 日程安排问题 日程安排问题...
在解决组合优化问题、棋盘游戏等场景中,回溯法常被用来穷举所有可能的解,并在找到有效解后停止搜索。在图的某些问题中,如八皇后问题、迷宫求解等,回溯法可以结合DFS一起使用,形成一种有效的解决方案。 在题目...
这些问题分别涉及了POJ(Problem Online Judge)平台上的一些题目,使用的编程语言为C++。下面将逐一解析这些题目及其解决方法。 ### 一、红与黑 **题目描述**: 此题涉及到一个二维数组`floor`,用来模拟某种棋盘...
这个问题也被称为“骑士巡逻问题”(Knight's Tour),其中“骑士”代表棋盘上的马,而“巡逻”则代表了马在棋盘上的路径。 棋盘上马的移动规则是“日”字形,即它可以移动到当前位置的横向两格、纵向一格的位置,...
9. **递归与回溯**:这两者常用于解决复杂的问题,例如棋盘游戏、迷宫问题、排列组合等。 10. **调试技巧**:学会使用调试工具,理解错误信息,逐步调试程序,是编程学习过程中的重要技能。 11. **效率优化**:...
- **棋盘分割**(9.10 练习题):可能需要处理二维空间中的几何分割问题,涉及图论或深度优先搜索。 这些题目覆盖了算法基础、数学应用、数据结构、逻辑推理等多个方面,通过解决这些题目,初学者可以逐步建立编程...
笔者本人写的一些代码,供大家参考. 包括但不限于镜子迷宫、棋盘问题、最长上升子序列、jungle roads gone fishing、nested dolls、paid roads、red and black等等 绝大部分是数据结构与算法课的作业
书中给出了45道动态规划题目,包括【POJ1141】括号序列、【POJ1191】棋盘分割等,这些都是经典的动态规划问题。括号序列问题要求最少添加括号使得序列成为规则序列,可以通过状态d[i, j]表示子串i...j需要添加的最少...
这个问题同样涉及到棋盘上的放置问题,但这次是放置炮兵。与之前的例子类似,可以使用状态压缩技术来简化问题,并通过动态规划找到最优解。 **3. poj1753** 该题是关于在棋盘上放置棋子的问题,每个格子可以放置或...
一、分治算法实验 - 棋盘覆盖问题 分治算法是一种解决问题的有效策略,它将复杂的问题分解为相同或相似的小问题,然后递归地解决这些小问题,最后将子问题的解合并得到原问题的解。在这个实验中,具体应用在棋盘...
在本题目中,“北大 ACM JudgeOnline poj1915 Knight Moves”要求解决的是一个经典的骑士行走问题。具体来说,题目背景提到了一位自称无人能及的国际象棋高手Mr. Somurolov,他声称没有人能够像他那样快速地移动骑士...