新的开始
凤凰博报 由你开始

回朔算法

发表于 2007-06-11 21:32:27

刚才写的不小心全给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

 

分享 浏览(622) 评论(0)
上一篇 << SQL全局变量表      下一篇 >> 多机调度问题

登录以后再发表评论。

关于博主

justforfun

海明威说-- “这个世界是美好的,值得我们为之奋斗” 我相信后半句...

加为好友

给博主留言    查看留言

文章列表

文章分类

最近发布