最近在做演算法時碰到這樣一道題目,題目是這樣的:
把從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數。
這是乙個典型的回溯演算法的解決案例,相當於是把n個數全排列的演算法的衍生。**如下:
#include #include #define add(a,b) a+b
int b[20];
void init();
int isprime(int);
void swap(int,int);
void printresult();
void search(int);
int main()
int isprime(int num);
int i;
for(i=0;i<11;i++)
return (0);
}void swap(int m,int i)
void init()
}void printresult()
printf("\n");
}void search(int m)
return;
}else
swap(m,i);}}
}
把從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數。
這是一道典型的用回溯演算法解決的題目。是
素數環 回溯演算法
設計 這個素數環有20個位置,每個位置可以填寫1 20的整數,可以對每個位置從1搜尋 約束條件 1 與前面已經填寫的數不重複 2 與前乙個數的和為素數 3 最後乙個數與第乙個數的和為素數 在填寫第k個位置時,如果滿足約束條件,則繼續填寫k 1個位置 如果1 20都不滿足,就回溯到k 1個位置,從原來...
演算法設計與分析回溯演算法之素數環問題
素數環 從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數。演算法流程 1 資料初始化 2 遞迴填數 判斷第i個數填入是否合法 a 如果合法 填數 判斷是否到達目標 20個已填完 是,列印結果 不是,遞迴填下乙個 剪枝條件 b 如果不合法 選擇下一種可能 include include ...
回溯演算法求素數環
把從1到n n 2 這n個數擺成乙個環,要求相鄰的兩個數的和是乙個素數,找出所有滿足條件的環。1 解向量 2 解空間樹 排列樹,n 1 個葉子結點 3 剪枝函式 isprime x t 1 x t t 2,3,n 約束函式 三.演算法實現 1 include2 include3 using name...