zoukankan      html  css  js  c++  java
  • 85 王、后传说

    85 王、后传说

    作者: turbo时间限制: 1S章节: 递归

    问题描述 :

    地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横、竖、斜线位置。

    看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地。各皇后都有自己的势力范围,但也总能找到相安无事的办法。

    所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死......

    现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王位于王宫的边缘,占用的格子可能不到9个)。当然,皇后也不会攻击国王。

    现在知道了皇宫的规模n,国王的位置(x,y)(国王位于第x行第y列,行和列号从1开始),请问,有多少种方案放置n个皇后,使她们不能互相攻击(同一横线、竖线、斜线上只能有一个皇后)。

    输入说明 :

    输入仅一行,包含三个整数,表示皇宫的规模n(n<=12)及国王的位置x和y坐标。

    输出说明 :

    一个整数,表示放置n个皇后的方案数

    输入范例 :
    8 2 2
    输出范例 :
    10

    #include <iostream>
    using namespace std;
    int martix[13][13] = { 0 };
    int n;
    int step = 0;
    bool check(int x, int y)
    {
    	for (int i = 1; i < x; i++)//该列是否有皇后
    	{
    		if (martix[i][y] == 2)
    			return false;
    	}
    	for (int i = 0; i < y; i++)//行
    	{
    		if (martix[x][i] == 2)
    			return false;
    	}
    	int y1 = y-1, y2 = y+1;
    	for (int i = x - 1; i >= 1; i--)
    	{
    		if (y1 >= 1 && martix[i][y1] == 2)
    			return false;
    		else
    			y1--;
    		if (y2<=n&&martix[i][y2]==2)
    			return false;
    		else
    			y2++;
    	}
    	return true;
    }
    void dfs(int x)//index行
    {
    	if (x == n + 1)
    	{
    		step++;
    		return;
    	}
    	for (int y = 1; y <= n; y++)
    	{
    		if (martix[x][y] == 1)//是否为国王
    			continue;
    		if (check(x, y))
    		{
    			martix[x][y] = 2;
    			dfs(x + 1);
    			martix[x][y] = 0;
    		} 
    	}
    }
    int main()
    {
    	int  x, y;
    	cin >> n >> x >> y;
    	int x1, y1, x2, y2;
    	x1 = x2 = x; y1 = y2 = y;
    	if (x1 - 1 >= 1)x1--;
    	if (y1 - 1 >= 1)y1--;
    	if (x2 + 1 <= n)x2++;
    	if (y2 + 1 <= n)y2++;
    	for (int i = x1; i <= x2; i++)
    	{
    		for (int j = y1; j <= y2; j++)
    		{
    			martix[i][j] = 1;
    		}
    	}
    	dfs(1);
    	cout << step << endl;
    	return 0;
    }
    
    Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/VictorierJwr/p/12878349.html
Copyright © 2011-2022 走看看