程序员面试题精选100题(58)-八皇后问题
字号:小|大
2019-09-22 FW.5VV.CN范文网
// 程序员面试题精选100题(58)-八皇后问题.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
static int sum=0;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
bool isqueen(int *arr,int n)
{
bool flag=true;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
if (i!=j)
{
if (i-j==arr[i]-arr[j]||i-j==arr[j]-arr[i])
{
return false;
}
}
}
}
return true;
}
void permution(int *arr,int i,int n)
{
if (i==n-1)
{
if (isqueen(arr,n))
{
sum++;
for (int j=0;j<n;j++)
{
cout<<arr[j]<<" ";
}
cout<<endl;
}
}
else
{
permution(arr,i+1,n);
for (int k=i+1;k<n;k++)
{
swap(arr[i],arr[k]);
permution(arr,i+1,n);
swap(arr[i],arr[k]);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[]={0,1,2,3,4,5,6,7};
permution(arr,0,8);
cout<<"sum is "<<sum<<endl;
system("pause");
return 0;
}
记得两三年前在林大的820自习室花了一天的时间做这道题,现在依然是看答案后才想出来。这题关键一是确定了用一元数组的数据结构后。二是采用排列的方式。三是如何判定符合条件
//
#include "stdafx.h"
#include <iostream>
using namespace std;
static int sum=0;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
bool isqueen(int *arr,int n)
{
bool flag=true;
for (int i=0;i<n;i++)
{
for (int j=0;j<n;j++)
{
if (i!=j)
{
if (i-j==arr[i]-arr[j]||i-j==arr[j]-arr[i])
{
return false;
}
}
}
}
return true;
}
void permution(int *arr,int i,int n)
{
if (i==n-1)
{
if (isqueen(arr,n))
{
sum++;
for (int j=0;j<n;j++)
{
cout<<arr[j]<<" ";
}
cout<<endl;
}
}
else
{
permution(arr,i+1,n);
for (int k=i+1;k<n;k++)
{
swap(arr[i],arr[k]);
permution(arr,i+1,n);
swap(arr[i],arr[k]);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int arr[]={0,1,2,3,4,5,6,7};
permution(arr,0,8);
cout<<"sum is "<<sum<<endl;
system("pause");
return 0;
}
记得两三年前在林大的820自习室花了一天的时间做这道题,现在依然是看答案后才想出来。这题关键一是确定了用一元数组的数据结构后。二是采用排列的方式。三是如何判定符合条件
相关文章
- 程序员面试题精选100题(06)-整数二进制表示中1的个数[算法]
- 程序员面试题精选100题(51)-顺时针打印矩阵[算法]
- 程序员面试题精选100题(23)-跳台阶问题[算法]
- 程序员面试题精选100题(35)-两链表的第一个公共结点[数据结构]
- 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
- 程序员面试题精选100题(13)-第一个只出现一次的字符
- 程序员面试题精选100题(61)-数对之差的最大值[算法]
- 安庆潜山事业单位面试真题汇总
- 程序员面试题精选100题(50)-树的子结构[数据结构]
- 程序员面试题精选100题(15)-含有指针成员的类的拷贝[C/C++/C#]
热门推荐
- 程序员面试题精选100题(06)-整数二进制表示中1的个数[算法]
- 程序员面试题精选100题(51)-顺时针打印矩阵[算法]
- 程序员面试题精选100题(23)-跳台阶问题[算法]
- 程序员面试题精选100题(35)-两链表的第一个公共结点[数据结构]
- 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数[算法]
- 程序员面试题精选100题(13)-第一个只出现一次的字符
- 程序员面试题精选100题(61)-数对之差的最大值[算法]
- 安庆潜山事业单位面试真题汇总
- 程序员面试题精选100题(50)-树的子结构[数据结构]
- 程序员面试题精选100题(15)-含有指针成员的类的拷贝[C/C++/C#]
