新的开始
凤凰博报 由你开始
http://justforfun.blog.ifeng.com
发表 管理 分类 简介 头像 功能 音乐 友情链接 模板 个性域名

2007-06-11 21:32:27 编辑 删除

浏览 851 次 | 评论 0 条

刚才写的不小心全给delete,,又得重新。就简原则。

void test(int i)

{

  if( i <= N)

  {

     for(j = 1; j <= N; j++)

     {

        if(OK(i,j))

        {

          H[i] = j;

          text(i+1);

        }

        else

        {

        }

      }

  }

  else

  {

    printf("第%d组解为",count);

    for(i = 1; i <= N; i++)

    {

      printf("%d",H[i]);

    }

   }

}

int OK(int i, int j)//看第i行的j列是否可以插入

{

   for( k = 1; k < i; i++)

   if((j = H[k]) || (k - H[k] = i - j) || ( k+H[k] = i + j))

     { 

       return 0;

     }

    else

    {

      return 1;

    }

}

 i 表示行号

 H[i] 表示第i行可以插入皇后的“纵坐标”

 N 表示n皇后

关键部分

if((j = H[k]) || (k - H[k] = i - j) || ( k+H[k] = i + j))

判断第j列 能否不加如 需要看看它的四周有没有皇后

H[K]该列的overhead

k - H[k] 与 k + H[k] 它的斜对角线

如果都不冲突 OK 加入  否则PASS   next one

 

0
上一篇 << SQL全局变量表      下一篇 >> 多机调度问题
您还没有登录,请登录以后再发表评论。

博文相关