素数环 回溯
来源:互联网 发布:电视直播源码 编辑:程序博客网 时间:2024/05/22 03:23
// 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;}