| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 313 人关注过本帖
标题:帮忙看下这个八皇后的错哪里了
只看楼主 加入收藏
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
结帖率:69.23%
收藏
已结贴  问题点数:20 回复次数:4 
帮忙看下这个八皇后的错哪里了
#include <stdio.h>
int nodanger(int row,int n,int (*a)[8])
{
    int i;
    int  k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
     //列  
5个flag判断5个方向有没有危险
        for( i=0; i<8;i++)
    {
        if (*(*(a+i)+n)!=0)
        {
        flag1=1;
            break;
        }
    }
    //左上
    for(i=row,k=n;i>0&&k>0;--i,--k)
    if (*((*a+i)+k)!=0)
    {
       flag2=1;
       break;
    }
    //右上
    for(i=row,k=n;i<8&&k>0;++i,--k)
    if(*(*(a+i)+k)!=0)
    {
        flag3=1;
        break;
    }
    //左下
    for(i=row,k=n;i>0&&k<8;--i,++k)
    {
        if(*(*(a+i)+k)!=0)
        {
            flag4=1;
            break;
        }
    }
    //右下
    for(i=row,k=n;i<8&&k<8;++i,++k)
    {
    if(*(*(a+i)+k)!=0)
    {
        flag5=1;
        break;
    }
    }    if(flag1==1||flag2==1||flag3==1||flag4==1||flag5==1)
    {
        return 1;
    }
    else
    {
    return 0;
    }
}
void eightqueen(int row,int n,int (*a)[8 ] )
{
    int b[8][8];
    int i,j;
    for(i=0;i<8;i++)
       for(j=0;j<8;j++)
          b[i][j]=a[i][j];
    if(8==row)
    {
        for (i=0;i<8;i++)
         for (j=0;j<8;j++)
        {
           printf ("%d",b[i][j]);
         }
         printf("\n");
    }
    else //还没找完,继续找
    {
        for(j=0;j<8;j++)
        if(nodanger (row,j,a))//ror行j列有没有问题
        {
            for(i=0;i<8;i++)
            {
                * (*((b+row)+i))=0;
            }
            *(*(b+row)+j)=1;
            eightqueen(row+1,j,a);//继续下一行
        }
    }
}
int main()
{
    int i,j;
    int a[8][8];
    for(i=0;i<8;i++)
      for(j=0;j<8;j++)
           a[i][j]=0;
      eightqueen(0,8,a);
      return 0;
}

[ 本帖最后由 NeQhk 于 2015-4-17 19:53 编辑 ]
搜索更多相关主题的帖子: include 
2015-04-17 19:50
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
你得说清楚不对的现象、自己的错误原因分析,最好注释再详细些。

能编个毛线衣吗?
2015-04-18 09:39
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
嗯,自己改正确了,一些细节没有注意到。。
2015-04-18 13:02
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
#include<stdio.h>
int count;
int nodanger(int row,int n,int (*a)[8])
{
   int i,k;
   int flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
   for(i=0;i<8;i++)
   {
     if(*(*(a+i)+n)!=0)
     {
        flag1=1;
        break;
     }
   }
   //左上
   for(i=row,k=n;i>=0 && k>=0 ;i--,k--)
   {
      if(*(*(a+i)+k)!=0)
      {
         flag2=1;
         break;
      }
   }

   //右下
   for(i=row,k=n; i<8&& k<8 ;i++,k++)
   {
     if(*(*(a+i)+k)!=0)
     {
         flag3=1;
         break;
     }
   }
   //右上
   for(i=row,k=n; i>=0 && k<8 ;i--,k++)
   {
       if(*(*(a+i)+k)!=0)
       {
           flag4=1;
           break;
       }
   }
   //左下
   for(i=row,k=n;i<8 && k>=0;i++,k--)
   {
      if(*(*(a+i)+k)!=0)
      {
        flag5=1;
        break;
      }
   }
   if(flag1||flag2||flag3||flag4||flag5)
   {
      return 0;
   }
   else
   {
       return 1;
   }
}

void f(int row,int n,int (*a)[8])
{
  int b[8][8];
  int i,j;
  for(i=0;i<8;i++)
  {
   for(j=0;j<8;j++)
   {
          b[i][j]=a[i][j];
   }  
  }
   if( 8 == row )
   {
       printf("第%d\n",count+1);
        for(i=0;i<8;i++)
        {
            for(j=0;j<8;j++)
          {
               printf("%d ",*(*(b+i)+j));
          }
           printf("\n");
        }
        printf("\n");
       count++;
   }
    else
    {
          for(j=0;j<n;j++)
          if(nodanger(row,j,a))
         {
           for(i=0;i<8;i++)
           {
                *(*(b+row)+i)=0;   
            }
           *(*(b+row)+j)=1;
        
           f(row+1,n,b);
        }
         
     }
 }
        

int main()
{
    int i,j;
    int a[8][8];
    for(i=0;i<8;i++)
      for(j=0;j<8;j++)
      {
        a[i][j]=0;
      }
      f(0,8,a);
      printf("%d",count);
      return 0;
}
2015-04-18 13:03
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
这是改好了的。。。
2015-04-18 13:03
快速回复:帮忙看下这个八皇后的错哪里了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036821 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved