// MathShortestPath.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
bool IsPrime(int iJudgedNum)
{
for(int i = 2;i <= iJudgedNum / 2 ;i++)
{
if(iJudgedNum % i ==0)
{
return true;
}
}
return false;
}
void swap(int& iTemp1,int& iTemp2)
{
int iTemp = 0;
iTemp = iTemp1;
iTemp1 = iTemp2;
iTemp2 = iTemp;
}
void GeneratePerm(int* piScr, int iSize, int iCur)
{
if(iCur == iSize - 1 && !IsPrime(*piScr + *(piScr + iCur)) )//回溯条件,降低递归枚举的复杂度。
{
for(int i = 0; i < iSize; i++)
{
printf("%d ",piScr[i]);
}
printf("\n");
}
else
{
for(int i =iCur + 1; i< iSize; i++)
{
if(!IsPrime( *(piScr + iCur) + *(piScr + i) ) )
{
swap(*(piScr + i), *(piScr + iCur + 1));
GeneratePerm(piScr,iSize,iCur+1);
swap(*(piScr + i), *(piScr + iCur + 1));
}
}
}
}
int main(int argc, char* argv[])
{
int aiTest[6]={5,4,3,2,1,6}; //这里假定起始位置是aiTest[0]因为是环,所以起始位置不是那么重要
GeneratePerm(aiTest,6,0);
system("pause");
return 0;
}