(回溯Uva524)素数环
生活随笔
收集整理的這篇文章主要介紹了
(回溯Uva524)素数环
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
輸入正整數,把整數1,2,3,···,n組成一個環,使得相鄰兩個整數之和均為素數。輸出時從整數1開始逆時針排列。同一個環應恰好輸出一次。n<=16
樣例輸入
6
樣例輸出
1 4 3 2 5 6
1 6 5 2 3 4
分析與解答
用一個數組a存答案,由于是從1開始,a[0]=1,
void DFS ( Vertex V ) {visited[ V ] = true;if(…) return;for ( V 的每個鄰接點 W )if ( !visited[ W ] )DFS( W ); }在這個題中,深搜需要的終止條件,l==n&&isp[A[0]+A[n-1]],l是位置,如果已確定了n個位置,說明此時終止,并且如果第一個a[0]等于a[n-1]說明此時終止,終止的話,從0到n-1輸出即可
如果不滿足終止條件,我們就找新的數填到位置l,然后遞歸找下一個位置需要填的數,如何知道該位置填什么數?我們知道第一個數是1,那這個位置的數我們假設是2到n中任一個,循環,如果滿足這個數不曾出現而且和上一個位置的數之和為素數,那我們就把這個位置填上這個數,把標記數組標記用來表明這個數已經被用過,并且遞歸調用找下個位置,我們遞歸完了還要清除標記數組的標記,就像是找到了一個可能情況,就不斷地回溯一樣,這樣的話最終會找出所有情況
總結
以上是生活随笔為你收集整理的(回溯Uva524)素数环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机专业对口升学模拟试题,2010对口
- 下一篇: shapefile导入oracle,sh