四皇后问题,在一个 4x4 的矩阵里找四个人填满,要求行和列还有对角都不能有人重复,为什么代码没报错但就是输不出东西呀
程序代码:
#include<stdio.h> int panduan(int(*a)[4],int i,int j) { int m,n; for(m=0,n=j;m<4;m++) { if(a[m][n]==1&&m!=i) return 0; }//判断这一列是否可走 for(m=i,n=0;n<4;n++) { if(a[m][n]==1&&n!=j) return 0; }//判断这一行是否可走 for(m=i-1,n=j-1;m>=0&&n>=0;m--,n--) { if(a[m][n]==1) return 0; }//判断左上方是否可走 for(m=i+1,n=j+1;m<4&&n<4;m++,n++) { if(a[m][n]==1) return 0; }//判断右下方是否可走 for(m=i+1,n=j-1;m<4&&n>=0;m++,n--) { if(a[m][n]==1) return 0; }//判断右上方是否可走 for(m=i-1,n=j+1;m>=0&&n<4;m--,n++) { if(a[m][n]==1) return 0; }//判断是否可右下方走 return 1; }//panduan函数判断下一步的未知是否符合 int huanghou(int(*a)[4],int q) { int count=0,i=0,j,t,flag; for(j=0;j<q;) { flag=0; for(;i<q;) { if(panduan(a,i,j)) { t=i;i=0;a[t][j]=1; j=j+1;flag=1;break; } }//变量t用来记录前一步行的信息,如富哦判断合法就走下一步,下一步的开始从行为零搜索; if(flag==0) { j=j-1;a[t][j]=0; i=t;i=i+1; }//如果行搜索完没有合适的就退回前一步,从前一步的下一行开始搜索; else continue; } if(j==4) { for(i=0;i<4;i++) { for(j=0;j<4;j++) printf(" %d ",a[i][j]); printf("\n"); } count++; }//如果四列都填完了 者找到一组解输出这一组解 return count; } void main() { int a[4][4],n=4,i,j;int count=0; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=0; count=huanghou(a,n); printf(" count=%d",count); }