1128 N Queens Puzzle (20分)
The "eight queens puzzle" is the problem of placing eight chess queens on an 8×8 chessboard so that no two queens threaten each other. Thus, a solution requires that no two queens share the same row, column, or diagonal. The eight queens puzzle is an example of the more general N queens problem of placing N non-attacking queens on an N×N chessboard. (From Wikipedia - "Eight queens puzzle".)
Here you are NOT asked to solve the puzzles. Instead, you are supposed to judge whether or not a given configuration of the chessboard is a solution. To simplify the representation of a chessboard, let us assume that no two queens will be placed in the same column. Then a configuration can be represented by a simple integer sequence (Q1,Q2,⋯,QN), where Qi is the row number of the queen in the i-th column. For example, Figure 1 can be represented by (4, 6, 8, 2, 7, 1, 3, 5) and it is indeed a solution to the 8 queens puzzle; while Figure 2 can be represented by (4, 6, 7, 2, 8, 1, 9, 5, 3) and is NOT a 9 queens' solution.
Figure 1 | Figure 2 |
Input Specification:
Each input file contains several test cases. The first line gives an integer K (1<K≤200). Then K lines follow, each gives a configuration in the format "N Q1 Q2 ... QN", where 4≤N≤1000 and it is guaranteed that 1≤Qi≤Nfor all i=1,⋯,N. The numbers are separated by spaces.
Output Specification:
For each configuration, if it is a solution to the N queens problem, print
YESin a line; or
NOif not.
Sample Input:
[code]4 8 4 6 8 2 7 1 3 5 9 4 6 7 2 8 1 9 5 3 6 1 5 2 6 4 3 5 1 3 5 2 4
Sample Output:
[code]YES NO NO YES
[code]#include<iostream> #include<vector> #include<unordered_set> using namespace std; int main(){ int k; cin >> k; for(int i = 0; i < k; i++){ int n; int graph[1001][1001] = {0}; scanf("%d", &n); unordered_set<int> un_set; vector<int> vec(n + 1); for(int j = 1; j <= n; j++){ int temp; scanf("%d", &temp); graph[j][temp] = 1; // graph[temp][j] = 1; vec[j] = temp; un_set.insert(temp); } bool flag = true; for(int j = 1; j <= n; j++){ int p = j + 1; for(int q = vec[j] + 1; q <= n && p <= n; q++){ if(graph[p][q] == 1){ flag = false; break; } p++; } if(!flag){ break; } p = j - 1; for(int q = vec[j] - 1; q >= 1 && p>= 1; q--){ if(graph[p][q] == 1){ flag = false; break; } p--; } if(!flag){ break; } } if(flag && un_set.size() == n){ printf("YES\n"); }else{ printf("NO\n"); } } return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
- 1101 Quick Sort (25分)
- C#使用request.GetRequestStream() 提示“底层连接已关闭:发送时发生意外错误”的问题
- layui 多文件上传 预览图 动态删除
- layui多图片上传 删除
- Build HOL4 on Ubuntu
- NGUI 使用UITable(或UIGrid)注意事项
- NGUI 屏幕自适应(初始设定宽高800x480只支持比其大的屏幕)
- NGUI 屏幕自适应大屏与小屏(初始设定宽高为1280x720,能适应比其小或者更大的屏)...
- NGUI 使用EventDelegate.Add与UIInput.onSubmit、UIInput.onChange限定编辑框中的内容
- NGUI 灰化按钮或图标
- (1366, "Incorrect string value: '\\xE5\\x93\\x88\\xE5\\x93\\x88' for column 'body' at row 1")
- 利用selenuim自动登录csdn
- 让JPA 飞 - QueryDSL
- The cast to value type 'System.Decimal' failed because the materialized value is null. Either the re...
- [Form builder]:about SYSTEM.MESSAGE_LEVEL
- [Form Builder]:CREATE_GROUP Built-in
- [Form Builder]APP_ITEM_PROPERTY.SET_PROPERTY 用法
- [Form Builder]NAME_IN()与COPY()
- [Form Builer]Locking Mode and LOCK_RECORD
- [Form Builder]内置函数execute_trigger、do_key详解