素数环 回溯

来源:互联网 发布:电视直播源码 编辑:程序博客网 时间: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;}