回溯法之N后问题

参考:http://www.cnblogs.com/hustcat/archive/2008/04/09/1144645.html

N后问题的描述:在N*N的方格中,放置N个皇后使得彼此不受攻击,即任意两个皇后不能在同一行、同一列或者同一条对角线上。

典型的搜索图:

回溯法之N后问题

典型的问题是八皇后问题:

 代码:

#include "stdafx.h"

#include<iostream>

using namespace std;



#define N  9

int x[N+1];



//输出结果

void Output()

{

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

    {

		cout<<"("<<i<<","<<x[i]<<")"<<endl;

    }

    printf("\n");

}



//求解函数

void Queen(int i,int n)

{

    if(i>n)

        Output();

    else

    {

        for(int j=1;j<=n;++j)

        {

            int k=1;

			x[i]=j;

            while(k<i)

            {

				if((x[k]-x[i])*(abs(x[k]-x[i])-abs(k-i))!=0)

                {

                    k++;

                    if(k==i)

                        Queen(i+1,n);

                }

                else

                {

                    break;

                }

            }

        }

    }

}

int _tmain(int argc, _TCHAR* argv[])

{

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

	 {

		x[1]=i; //设置第一行

        Queen(2,N);

	 }

	return 0;

}

 

你可能感兴趣的:(问题)