西历772002年。
在喵哈哈村,有一个无忧无虑的少年XiperXiper。在贵族家庭长大的XiperXiper,每天无忧无虑地过着挠挠头,吹吹逼的快乐生活。
然而一天,一辆马车到达了xiper的家里。从马车上,走下一个优雅的年轻人。
“在下周日天,有何贵干!?”
原来在十年前,XiperXiper的爹曾被日天的爹所救。于是在日天的爹死后,xiper的爹为了报恩,收养了日天。
日天不仅挠头比XiperXiper快,吹逼也比XiperXiper屌,很快XiperXiper的朋友们都被日天给拉拢了。日天的到来,结束了XiperXiper无忧无虑的日子。
俗话说得好,上帝给你关上了一扇门,同时也会给你打开一扇窗户。在机缘巧合之下,郁闷的XiperXiper偶遇了美丽的卿学姐,并与她坠入了爱河。
然而,这一切都被狡诈的日天看在眼里。一日,日天趁着卿学姐独自一人,强吻了卿学姐。
“你的初吻不是XiperXiper的,而是我周日天的!”
夺妻之仇,不过如此!忍无可忍的XiperXiper终于向日天发起了挑战。他要日天在99行99列的国际象棋盘上摆下99个皇后,并使九个皇后互相无法攻击的所有方案!
日天万万没想到,XiperXiper居然问他智力题。被智商碾压的日天当即吐出一口鲜血,倒地不起。
从此,日天不敢轻视XiperXiper,在表面上和XiperXiper和平相处。
那么问题来了,所有的方案到底是什么呢?
Input一个数SIZESIZE(9<=SIZE<=9)(9<=SIZE<=9),代表棋盘的大小
Output第一行输出一个数NN,表示所有的方案数。
接下来NN行,每行输出SIZESIZE个数,第ii个数aiai表示在第ii行第aiai列放了皇后。
因为出题人懒得写spj,所以请按字典序输出每个方案。
Sample Input8///仅作为例子参考Sample Output
921 5 8 6 3 7 2 4 1 6 8 3 7 4 2 5 1 7 4 6 8 2 5 3 1 7 5 8 2 4 6 3 (剩下88种请自行脑补)Hint
如果任意两个皇后都不在同一行、同一列、同一斜线上,则是满足条件的方案。
只有一组测试数据。
由于出题人是个智障,输出答案时,每个方案最后一个数字后面要多输出一个空格再换行,不然似乎会PE…
题解:很久不更博了,马上又要比赛了,也希望自己还能再征战一回ACM省赛
#include<cstdio>int N;int num;int a[10];int ans[500][500];void dfs(int x) { if(x==N) { num++; for(int i = 0;i<N;i++) { ans[num][i] = a[i]; } } else{ for(int i = 1;i<=N;i++) { a[x] = i;//暴力列数 int flag = 0; for(int j = 0;j <x ;j++) { if(a[x] == a[j] || x - a[x] == j - a[j] || x+a[x]==j+a[j])//不同行不同列不同对角线 { flag = 1; break; } } if(flag == 0) dfs(x+1); } }}int main(){ num = 0; scanf("%d",&N); dfs(0); printf("%d\n",num); for(int i = 1;i<=num;i++) { for(int j = 0;j<N;j++) { printf("%d ",ans[i][j]); } printf("\n"); } return 0;}