在一个8×8格的国际象棋盘上,最多放置5个皇后就可以控制整个局面,即无论对方的棋子放在哪一个都会被吃掉请编出五个皇后的分布
来源:互联网 发布:localstorage用法 php 编辑:程序博客网 时间:2024/04/29 11:15
#include<stdio.h>
#include <fstream>
#include <map>
#include <set>
using namespace std;
#include<stdio.h>
typedef struct ctrlPoint
{
int nCount ;
set<int> value;
}CtrlPoint;
int end[5]={59,60,61,62,63};
int begin[5]={0,1,2,3,4};
CtrlPoint CtlPoint[64]={0};
bool GetNextValue(int * pData,int pos)
{
pData[pos]++;
if (pData[pos] <= end[pos])
return true;
int nNext = pos -1;
while (nNext>=0)
{
pData[nNext]++;
if (pData[nNext]<=end[nNext])
{
for (int i = nNext;i<pos;i++)
pData[i+1]=pData[i]+1;
return true ;
}
else
--nNext;
}
return false;
}
void GetCtrlPoint(int num,CtrlPoint *pCtrl)
{
int x = num/8;
int y = num %8;
int i =0;
int j =0;
pCtrl->nCount=0;
for (int i =0;i< 8;i++)
{
pCtrl->value.insert(x*8+i);
pCtrl->nCount++;
if (i==x)
continue;
pCtrl->value.insert(i*8+y);
pCtrl->nCount++;
}
i =x+1;
j =y+1;
for ( ;i<8&&j<8;i++,j++)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
i =x+1;
j =y-1;
for ( ;i<8&&j>=0;i++,j--)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
i =x-1;
j =y-1;
for ( ;i>=0&&j>=0;i--,j--)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
i =x-1;
j =y+1;
for ( ;i>=0&&j<8;i--,j++)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
}
bool CanCover()
{
set<int> pointSet;
for (int i =0;i<5;i++)
{
CtrlPoint pPoint=CtlPoint[begin[i]];
// for (int j =0;j<pPoint.nCount;j++)
pointSet.insert(pPoint.value.begin(),pPoint.value.end());
}
if (pointSet.size()>=64)
{
printf ("%d,%d,%d,%d,%d,total=%d \n",begin[0],begin[1],begin[2],begin[3],begin[4],pointSet.size());
return true;
}
return false;
}
int main()
{
for (int i =0;i<64;i++)
{
GetCtrlPoint(i,&CtlPoint[i]);
}
while (1)
{
CanCover();
if (!GetNextValue(begin,4))
break;
}
getchar();
}
#include <fstream>
#include <map>
#include <set>
using namespace std;
#include<stdio.h>
typedef struct ctrlPoint
{
int nCount ;
set<int> value;
}CtrlPoint;
int end[5]={59,60,61,62,63};
int begin[5]={0,1,2,3,4};
CtrlPoint CtlPoint[64]={0};
bool GetNextValue(int * pData,int pos)
{
pData[pos]++;
if (pData[pos] <= end[pos])
return true;
int nNext = pos -1;
while (nNext>=0)
{
pData[nNext]++;
if (pData[nNext]<=end[nNext])
{
for (int i = nNext;i<pos;i++)
pData[i+1]=pData[i]+1;
return true ;
}
else
--nNext;
}
return false;
}
void GetCtrlPoint(int num,CtrlPoint *pCtrl)
{
int x = num/8;
int y = num %8;
int i =0;
int j =0;
pCtrl->nCount=0;
for (int i =0;i< 8;i++)
{
pCtrl->value.insert(x*8+i);
pCtrl->nCount++;
if (i==x)
continue;
pCtrl->value.insert(i*8+y);
pCtrl->nCount++;
}
i =x+1;
j =y+1;
for ( ;i<8&&j<8;i++,j++)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
i =x+1;
j =y-1;
for ( ;i<8&&j>=0;i++,j--)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
i =x-1;
j =y-1;
for ( ;i>=0&&j>=0;i--,j--)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
i =x-1;
j =y+1;
for ( ;i>=0&&j<8;i--,j++)
{
pCtrl->value.insert(i*8+j);
pCtrl->nCount++;
}
}
bool CanCover()
{
set<int> pointSet;
for (int i =0;i<5;i++)
{
CtrlPoint pPoint=CtlPoint[begin[i]];
// for (int j =0;j<pPoint.nCount;j++)
pointSet.insert(pPoint.value.begin(),pPoint.value.end());
}
if (pointSet.size()>=64)
{
printf ("%d,%d,%d,%d,%d,total=%d \n",begin[0],begin[1],begin[2],begin[3],begin[4],pointSet.size());
return true;
}
return false;
}
int main()
{
for (int i =0;i<64;i++)
{
GetCtrlPoint(i,&CtlPoint[i]);
}
while (1)
{
CanCover();
if (!GetNextValue(begin,4))
break;
}
getchar();
}
- 在一个8×8格的国际象棋盘上,最多放置5个皇后就可以控制整个局面,即无论对方的棋子放在哪一个都会被吃掉请编出五个皇后的分布
- 1.八皇后问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后
- 设计一种算法,打印八皇后在8*8棋盘上的各种摆法
- 求八皇后问题的92个解并在棋盘上显示它们
- (POJ1321) 棋盘问题 <DFS ,八皇后问题的变形,皇后数目小于等于行数即有些行可以不放>
- 內固——n*n的棋盘上最多可以放多少个马
- HDU5480象棋盘上有很多車,求一个矩形里面的棋子能否全部被車吃
- 在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天。要求尽早聚会
- 八皇后加强版:每个皇后最多攻击一个其它的皇后
- uva 10237 n x n棋盘上放k个棋子 棋子不能在同一斜线上 求总类数
- C++递归问题之二——n皇后问题:以四、八皇后为例,给定n个皇后要求将它们放在一个n维矩阵中,任意两个皇后不能出现在同一行、列、主副对角线上,输出具体的摆放方式
- M*N棋盘上的K皇后问题
- N皇后问题的局面个数 N-Queens II
- 练习二 1019 放置皇后的问题
- 八皇后位置放置的方案
- Python中的生成器在八皇后问题上的应用
- Knight Probability in Chessboard:棋盘上计算K步之后棋子仍在棋盘上的概率
- 皇后问题最快的解法(C语言)八皇后、十六皇后时间在毫秒级
- XCode 4.3.X一个小众Bug及解决方法
- SAP 如何设置采购收货直接转到供应商库存
- c#中用DirectShow实现媒体播放器的核心(0) 完成后的代码
- VS2005增加一个Direct show fitter 的配置
- 设计模式--策略模式
- 在一个8×8格的国际象棋盘上,最多放置5个皇后就可以控制整个局面,即无论对方的棋子放在哪一个都会被吃掉请编出五个皇后的分布
- Sql Server 2005中的架构(Schema)、用户(User)、登录(Login)和角色(Role)(一)
- oracle几个面试题
- 设计模式--代理模式
- JUnit入门
- jquery在IE中使用append应注意的问题
- Tangram信息发布系统正式发布了!
- Android:支持不同的语言
- Sql Server 2005中的架构(Schema)、用户(User)、登录(Login)和角色(Role)(二)