九度1254:N皇后问题

题目1254:N皇后问题
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:566
解决:157
题目描述:
N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。

你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。

输入:
输入包含多组测试数据。
每组测试数据输入一个整数n(3<n<=13),表示有n*n的棋盘,总共摆放n个皇后。

输出:
对于每组测试数据,输出总共不同的摆放情况个数,结果单独一行。

样例输入:
4
样例输出:
2
来源:
2013年王道论坛研究生机试练习赛(三)

题目数据比较水,只到13,用深入搜索超时,但是可以得到前十三个结果,偷懒了,不过还算过了,继续研究优化算法!
AC代码:

#include<stdio.h>
#include<string.h>
int a[20][20],n,sum;
void Fun(int x,int n)
{
   int i,j,flag,k,w;
   if(x>n)
   {
    sum++;
    return;
   }
   else
   {
       for(i=1;i<=n;i++)
    {
     flag=0;
     for(j=1;j<x;j++)//检测上
     {
      if(a[j][i]!=0)
     flag=1;
     }
     k=x-1;w=i-1;//检测左斜上方
     while(k>0&&w>0)
     {
      if(a[k--][w--]!=0)
       flag=1;
     }
     k=x-1;w=i+1;//检测右斜上方
     while(k>0&&w<=n)
     {
      if(a[k--][w++]!=0)
       flag=1;
     }

     if(flag==0)
     {
      a[x][i]=1;
      Fun(x+1,n);
      a[x][i]=0;
     }
    }
   }
}
int main()
{
 int i,j,n;
 while(scanf("%d",&n)!=EOF)
 {
    sum=0;
       for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
     a[i][j]=0;
    if(n<11)
    {
           for(i=1;i<=n;i++)
     {
      a[1][i]=1;
      Fun(2,n);
      a[1][i]=0;
     }
     printf("%d\n",sum);
    }
    else//向后就超时了,只能直接输出(羞愧)
    {
     if(n==11)
     printf("2680\n");
     else if(n==12)
     printf("14200\n");
     else
     printf("73712\n");
    }

 }
 return 0;
}
时间: 2024-11-02 11:11:37

九度1254:N皇后问题的相关文章

九度OnlineJudge之1014:排名

题目描述:                            今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印. 输入:                            测试输入包含若干场考试的信息.每场考试信息的第1行给出考生人数N ( 0 < N < 1000 ).考题数M ( 0 < M < = 10 ).分数线(正整

九度OJ 题目1510:替换空格

题目1510:替换空格 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1697 解决:436 题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20H

算法-九度oj 题目1144:Freckles,不能通过,为什么超时间?

问题描述 九度oj 题目1144:Freckles,不能通过,为什么超时间? #include #include #include using namespace std; const int maxn = 5000; const double INF = 1000000000; bool vis[maxn] = {false}; double x[maxn],y[maxn]; int n ; int father[maxn]; struct Node{ double u,v; double c

年度中国最具创新性新媒体奖花落九度

照片中左一为九度无线传媒代表,公司品牌管理中心总监罗庆隆在领奖现场 在2008年1月9日,由中国广告网和央视市场研究(CTR)发起并联合主办的中国"首届新媒体年度盛典"上,在新媒体领域呼声很高的九度无线传媒,经过专家组的评审推荐,荣获组委会颁发的本届"年度中国最具创新性新媒体奖". 本届新媒体盛典的举办在中国尚属首次,其举办的背景是在继分众传媒.航美等为代表的新兴媒体成功崛起之后,带动了中国新媒体领域的大跃进,2006年.2007年涌现出一大批富于创意,具有代表性的

九度题目1120:全排列

题目1120:全排列  时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2749 解决:669 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列. 输入: 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间. 输出: 输出这个字符串的所有排列方式,每行一个排列.要求字母序比较小的排列在前

人生九度

 1.工作方面,能力不敌态度: 2.事业方面,才华不敌韧度: 3.知识方面,广博不敌深度: 4.思想方面,敏锐不敌高度: 5.做人方面,精明不敌气度: 6.做事方面,速度不敌精度: 7.看人方面,外貌不敌风度: 8.写作方面,文采不敌角度: 9.方法方面,创意不敌适度

九度题目1110:小白鼠排队

题目1110:小白鼠排队 时间限制:1 秒内存限制:32 兆特殊判题:否提交:1348解决:820 题目描述: N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子.现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色.帽子的颜色用"red","blue"等字符串来表示.不同的小白鼠可以戴相同颜色的帽子.白鼠的重量用整数表示. 输入: 多案例输入,每个案例的输入第一行为一个整数N,表示小白鼠的数目. 下面有N行

九度题目1188:约瑟夫环

题目1188:约瑟夫环 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1500 解决:665 题目描述:     N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的 人再从1.2.3开始报数,报p的人再退出圈外,以此类推.     请按退出顺序输出每个退出人的原序号. 输入: 包括一个整数N(1<=N<=3000)及一个整数p. 输出: 测试数据可能有多组,对于每一组数据, 按退出顺序输出每个退出人的原序号. 样例输入: 7 3 样例输出:

九度题目1008:最短路径问题

题目1008:最短路径问题 时间限制:1 秒内存限制:32 兆特殊判题:否提交:5129解决:1634 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花 费,如果最短距离有多条路线,则输出花费最少的. 输入: 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p. 最后一行是两个数 s,t;起点s,终点t.n和m为0时输入结束. (1n=1000, 0m100000,