hdu 2553 N皇后问题(有点坑爹的深搜题dfs)
2013-02-25 22:02
381 查看
题意:就是问任意两个点之间不在同一行、不在同一列、两点的连线不能与正方形的边成45度角总共有多少种方法。
思路:一般的深搜题,但要注意两点的连线不能与正方形的边成45度角,坑爹的是用深搜编出来之后我提交了竟然是超时,后来想想完全可以打表啊!!
代码实现:
思路:一般的深搜题,但要注意两点的连线不能与正方形的边成45度角,坑爹的是用深搜编出来之后我提交了竟然是超时,后来想想完全可以打表啊!!
代码实现:
超时代码,用的是基本的深搜,能够得出结果,用于后面的打表 #include<stdio.h> #include<string.h> intsum,n,visited[15],flag1[25],flag2[25]; voiddfs(inti,intnum) { intj; 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--; } } } } intmain() { 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); } return0; } 打表代码:
#include<stdio.h> intmain() { inta[11]={0,1,0,0,2,10,4,40,92,352,724},n; while(scanf("%d",&n)!=EOF&&n) { printf("%d\n",a[n]); } return0; }
相关文章推荐
- 文章标题 HDU 2553 : N皇后问题 (DFS)
- hdu 2553 N皇后问题 经典dfs
- HDU 2553 N皇后问题 (DFS)
- hdu 2553 N皇后问题 (DFS)
- 【DFS】hdu 2553 N皇后问题
- HDU 2553 N皇后问题 dfs回溯+打表
- HDU 2553 (DFS) N皇后问题
- HDU Problem 2553 N皇后问题 【DFS】
- HDU-2553-N皇后问题【DFS】
- hdu 2553 N皇后问题 (dfs 打表)
- HDU 2553 N皇后问题(dfs)
- HDU 2553 N皇后问题 (回溯DFS)
- HDU 2553 N皇后问题(DFS)
- hdu 2553 N皇后问题(dfs)
- hdu 2553:N皇后问题(DFS遍历,水题)
- HDU 2553 N皇后问题 (DFS+回溯)
- HDU——2553 N皇后问题(dfs打表)
- HDU 2553 N皇后问题 (搜索DFS)
- HDU 2553 N皇后问题 (DFS_回溯)
- hdu 2553 N皇后问题(dfs)