N皇后问题 + 汉诺塔(递归)

N皇后问题是典型的递归问题,现在先把题目要求描述一下:

样例输出:

2 4 1 3

3 1 4 2

展示一种解法:

#include<iostream>
#include<cmath>
using namespace std;
int N;
int queenPos[100];
void NQueen(int k)
{
    int i;
    if(k==N)
    {
        for(i=0;i<N;i++)
            cout<<queenPos[i]+1<<" ";
        cout<< endl;
		return  ;
    }
    
    for(i=0;i<N;i++){
		int j;
        for(j=0;j<k;j++){
            if(queenPos[j]==i || abs(queenPos[j]-i)==abs(k-j))
				break;
        }
        if(j==k)
        {
            queenPos[k]=i;
            NQueen(k+1);
        }
    }
}
int main()
{
    cin >> N;
    NQueen(0);
    return 0;
}

汉诺塔问题也是典型的递归算法解决的问题,点击下面链接直接可以练习:

http://acm.nyist.edu.cn/JudgeOnline/keysearch.php?key=%E6%B1%89%E8%AF%BA%E5%A1%94

算法问题的时候一定要逻辑清晰,头脑清醒,多练习,多总结,算法代表着用系统的方法描述解决问题的策略机制,多加练习,一定会有所收获。

猜你喜欢

转载自blog.csdn.net/wl20222022/article/details/82711900