博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenJudge 2754 八皇后
阅读量:6342 次
发布时间:2019-06-22

本文共 1527 字,大约阅读时间需要 5 分钟。

1.链接地址:

http://bailian.openjudge.cn/practice/2754

2.题目:

总时间限制:
1000ms
内存限制:
65536kB
描述
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b
1b
2...b
8,其中b
i为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。
输入
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)
输出
输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。
样例输入
2192
样例输出
1586372484136275

3.思路:

首先把说有可能的情况保存到一个vector再查询

寻找方法利用递归+mark

4.代码:

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 int arr[8][8]; 8 vector
v_res; 9 10 void f(int sum,int i)11 {12 //cout<< "f(" << sum << "," << i << ")" <
= 0); ++k) arr[i + k][j - k] += 1;27 for(k = 1; ((i + k) < 8) && ((j + k) < 8); ++k) arr[i + k][j + k] += 1;28 f(sum * 10 + (j + 1), i + 1);29 arr[i][j] = 0;30 for(k = i + 1; k < 8; ++k) arr[k][j] -= 1;31 for(k = 1; ((i + k) < 8) && ((j - k) >= 0); ++k) arr[i + k][j - k] -= 1;32 for(k = 1; ((i + k) < 8) && ((j + k) < 8); ++k) arr[i + k][j + k] -= 1;33 }34 }35 }36 }37 38 int main()39 {40 //freopen("C://input.txt","r",stdin);41 42 int n;43 cin>>n;44 45 f(0,0);46 47 int b;48 while(n--)49 {50 cin>>b;51 cout<

 

转载于:https://www.cnblogs.com/mobileliker/p/3556810.html

你可能感兴趣的文章
3D图形技术概念和渲染管线的处理 for shader 1
查看>>
运维工程师必备Linux常见安全策略与实践
查看>>
WSCommCntr1.exe;WSCommCntrAcCon.arx
查看>>
AutoCAD_系统变量
查看>>
MFC_Picture Control图片
查看>>
android字体大小的设置
查看>>
2015.06.04 工作任务与心得
查看>>
icinga2使用587端口发邮件
查看>>
hpasmcli查看HP服务器内存状态
查看>>
极客工具
查看>>
【14】Python100例基础练习(1)
查看>>
我的友情链接
查看>>
boost bind使用指南
查看>>
/etc/fstab功能详解
查看>>
oracle高速缓存机制
查看>>
使用ntpdate更新系统时间
查看>>
Android M 特性 Doze and App Standby模式详解
查看>>
IE FF(火狐) line-height兼容详解
查看>>
谷歌Pixel 3吸引三星用户, 但未动摇iPhone地位
查看>>
python获取当前工作目录
查看>>