广度优先搜索和深度优先搜索—N皇后问题

来源:互联网 发布:win7不显示网络图标 编辑:程序博客网 时间:2024/05/16 12:59

1.递归回溯法

源代码:

#include <stdio.h>#include <math.h>#define N 15int x[N];          //皇后放置的列数int n;            //皇后个数int sum=0;        //可行解个数int place(int k){int i;for(i=1;i<k;i++)       if(abs(k-i)==abs(x[k]-x[i])||x[k]==x[i])   return 0;   return 1;}int queen(int k){int i;if(k>n)sum++;else   for(i=1;i<=n;i++)   {   x[k]=i;   if(place(k))   queen(k+1);   }   return sum;}int main(){printf("Please input n:(n<15)");scanf("%d",&n);printf("%d\n",queen(1));return 0;}

2.迭代回溯法

源代码:

#include <stdio.h>#include <math.h>#define N 15int n;int sum=0;int x[N];int place(int k){int  i;for(i=1;i<k;i++)if(abs(k-i)==abs(x[k]-x[i])||x[k]==x[i])return 0;return 1;}int queen(){int t=1;x[1]=0;while(t>0){x[t]++;while(x[t]<=n&&!place(t))x[t]++;if(x[t]<=n){if(t==n)sum++;elsex[++t]=0;}elset--;}return sum;}int main(){printf("Please input n:(n<15)");scanf("%d",&n);printf("%d\n",queen());return 0;}


0 0
原创粉丝点击