原创马踏联营
来源:互联网 发布:linux apr版本 编辑:程序博客网 时间:2024/05/16 17:39
/*Name: 原创马踏联营 Author: 巧若拙 Description:描述:给定一个m*n的棋盘,格子上分布着黑马,白马或空白(分别用数字1,2和0表示),按照马踩日的行棋规则,每个棋子可以走到空白棋格或有对方子的位置上(吃掉对方的马),其中若是吃掉对方的子,则可以继续行棋; 若是走到空白棋格,则不能再动。输入:第一行是三个整数m(1≤m≤20),n(1≤n≤20)和q(取值1或2),分别表示行,列数和当前走动棋子的颜色。接下来m行中,每行有n个用空格隔开的数字。其中1表示黑马,2表示白马,0表示空白 输出:三个整数,分别走动棋子的初始坐标和它能够吃掉对方的棋子数量。若有多个棋子满足条件,则输出坐标值之和最小的一个。 样例输入: 6 6 11 2 0 0 0 00 0 1 1 0 02 1 0 0 1 00 0 2 0 0 00 0 0 2 2 00 0 0 0 0 0样例输出2 4 4 (表示坐标为(2,4)的黑马能连续吃掉对方4个子 */#include<iostream>#include<cstring>using namespace std;const int M = 20;const int N = 20;int A[M][N];bool lib[M][N]; //标记该点是否已经来过 int DicX[8] = {-1,-2,-2,-1,1,2,2,1}; //从西北角开始向各个方向移动,x坐标相当于行坐标 int DicY[8] = {-2,-1,1,2,2,1,-1,-2}; //从西北角开始向各个方向移动,y坐标相当于列坐标 int s, maxS, m, n, q; void DFS(int x, int y, int s); //x和y分别表示当前行坐标和列坐标,s表示目前走棋路线已经吃掉的棋子数量 int main() {cin >> m >> n >> q; for (int i=0; i<m; i++){for (int j=0; j<n; j++){cin >> A[i][j];}}int x, y;for (int i=0; i<m; i++){for (int j=0; j<n; j++){if (A[i][j] == q) {memset(lib, 0, sizeof(lib)); s = maxS; //当前最大值 DFS(i, j, 0); if (s < maxS)//更新了最大值,记录棋子的初始坐标 {x = i;y = j;} } }}cout << x+1 << " " << y+1 << " " << maxS << endl; return 0;}void DFS(int x, int y, int s)//x和y分别表示当前行坐标和列坐标,s表示目前走棋路线已经吃掉的棋子数量 {int nx, ny;for (int i=0; i<8; i++){nx = x + DicX[i]; ny = y + DicY[i];if (nx >= 0 && nx < m && ny >= 0 && ny < n && !lib[nx][ny] && A[nx][ny] != q){if (A[nx][ny] != 0) //吃掉对方棋子,继续走棋 { lib[nx][ny] = 1; //走过了就不能再来 if (s == maxS) //更新吃子最大值 maxS = s + 1;DFS(nx, ny, s+1);lib[nx][ny] = 0; //还原}}}}
阅读全文
0 0
- 原创马踏联营
- 自营PK联营究竟那种模式占优?
- 原创!!!
- 原创
- 原创
- 原创
- [原创]
- 原创
- 原创
- 原创
- 原创
- 原创
- 原创
- 原创
- 原创
- 原创
- 原创
- 原创
- 分布式大数据存储:向上索引法
- 2985:数字组合(2.6基本算法之动态规划)
- Gym-101490H
- 找字符串中首次出现3次某个字符
- 删除子串
- 原创马踏联营
- leetcode 290.Word Pattern
- include<filename>和#include"filename"的区别
- .tar.bz2文件解压命令
- Composer安装Thinkphp5
- 将项目发布到Maven中央库
- Java之assert方法使用
- 最全Pycharm教程(40)——Pycharm扩展功能之捆绑插件TextMate
- EOJ 3329 dp