四皇后问题,在一个 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);
}









