7-5 德邦国王 (110 分)

        写了好久, 本来dfs函数里国王的坐标都写成了(kingX, kingY)导致有两个点过不去(可能递归层数比较深, 用到了多次国王坐标)。后来发现kingX, kingY原本只是为了记录初始状态时的国王坐标, 通过函数参数传进去了, 因此x,y维护的就是国王在每层递归的实时坐标。

        这道题训练了我多次剪枝能力, 通过剪枝减少不必要的递归

#include 
#define N 5
#define K 8
#define M 15
using namespace std;int now[N + 1][N + 1], target[N + 1][N + 1];    //现有矩阵, 目标矩阵
int wayX[K + 1], wayY[K + 1];   //国王移动方式
int n, k, maxStep;    //N K M分别表示[矩阵的大小]、[国王的瞬移方法数量]和[国王的瞬间移动限定次数]
int res = 0x3f3f3f3f;    //最小移动次数
int kingX, kingY;   //国王当前坐标int is_Same()
{int cnt = 0;for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(now[i][j] == target[i][j]) cnt++;return cnt;
}void dfs(int x, int y, int nowStep)
{//cout << kingX << " " << kingY << endl;int sum = is_Same();     //统计已归位的人数if(sum == n * n)    //达成条


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部