zoukankan      html  css  js  c++  java
  • hdu 2553 N皇后问题(有点坑爹的深搜题dfs)

    题意:就是问任意两个点之间不在同一行、不在同一列、两点的连线不能与正方形的边成45度角总共有多少种方法。

    思路:一般的深搜题,但要注意两点的连线不能与正方形的边成45度角,坑爹的是用深搜编出来之后我提交了竟然是超时,后来想想完全可以打表啊!!

    代码实现:

    超时代码,用的是基本的深搜,能够得出结果,用于后面的打表
    #include<stdio.h> #include<string.h> int sum,n,visited[15],flag1[25],flag2[25]; void dfs(int i,int num) { int j; if(num==n) sum++; else { for(j=1;j<=n;j++) { if(visited[j]==0&&flag1[i+j]==0&&flag2[n-i+1+j]==0) { num++; visited[j]=-1; flag1[i+j]=-1; flag2[n-i+1+j]=-1; dfs(i+1,num); visited[j]=0; flag1[i+j]=0; flag2[n-i+1+j]=0; num--; } } } } int main() { while(scanf("%d",&n)!=EOF&&n) { sum=0; memset(visited,0,sizeof(visited)); memset(flag1,0,sizeof(flag1)); memset(flag2,0,sizeof(flag2)); dfs(1,0); printf("%d\n",sum); } return 0; }


    打表代码:
    #include<stdio.h>
    int main()
    {
       int a[11]={0,1,0,0,2,10,4,40,92,352,724},n;
       while(scanf("%d",&n)!=EOF&&n)
       {
          printf("%d\n",a[n]);
       }
       return 0;
    }
     

     

  • 相关阅读:
    结对第二次作业
    结对项目第一次作业
    2017 软工第二次作业
    2017软工实践--第一次作业
    软工--最后的作业
    软件产品案例分析
    个人技术博客—作业向
    软工结队第二次作业
    软工第二次作业---数独
    软工实践第一次作业----阅读有感
  • 原文地址:https://www.cnblogs.com/jiangjing/p/2932768.html
Copyright © 2011-2022 走看看