一、排序STL
#include <string.h>
#include <algorithm>
using namespace std;
struct Student
{
int id;
char name[10];
int score;
};
bool cmp(Student a, Student b)
{
if (a.score != b.score)
return a.score > b.score;
return strcmp(a.name, b.name) < 0;
}
二、全排列的递归解法
#include<stdio.h>
const int maxn=11;
int n,P[maxn],hashTable[maxn]={false};
void generateP(int index)
{
if(index==n+1)
{
for(int i=1;i<=n;i++)
{
printf("%d",P[i]);
}
printf("\n");
return;
}
for(int x=1;x<=n;x++)
{
if(hashTable[x]==false)
{
P[index]=x;
hashTable[x]=true;
generateP(index+1);
hashTable[x]=false;
}
}
}
int main()
{
n=3;
generateP(1);
return 0;
}
三、利用全排列解决n皇后问题(暴力)
#include<stdio.h>
#include<math.h>
const int maxn=11;
int n,P[maxn],hashTable[maxn]={false};
void generateP(int index)
{
if(index==n+1)
{
bool flag=true;
int count;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(abs(i-j)==abs(P[i]-P[j])) flag=false;
}
}
if(flag==true) count++;
return;
}
for(int x=1;x<=n;x++)
{
if(hashTable[x]==false)
{
P[index]=x;
hashTable[x]=true;
generateP(index+1);
hashTable[x]=false;
}
}
}
int main()
{
n=3;
generateP(1);
return 0;
}
四、利用全排列解决n皇后问题(回溯)
#include<stdio.h>
#include<math.h>
const int n=3;
const int maxn=11;
int P[maxn],hashTable[maxn]={false};
int count=0;
void generateP(int index)
{
int i=0;
if(index==n+1)
{
count++;
return;
}
for(int x=1;x<=n;x++)
{
if(hashTable[x]==false)
{
bool flag=true;
for(int pre=1;pre<index;pre++)
{
if(abs(index-pre)==abs(P[pre]-x))
{
flag=false;
break;
}
}
if(flag==true)
{
P[index]=x;
hashTable[x]=true;
generateP(index+1);
hashTable[x]=false;
}
}
}
}