HDU 1016 Prime Ring Problem(dfs)


タイトルの住所:http://acm.hdu.edu.cn/showproblem.php?pid=1016
とても簡単なDFS問題です。直接コード:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>
using namespace std;
int n, a[30], vis[30];
void dfs(int s[30], int x, int vis[30])
{
    int i, t, j,flag;
    if(x==n-1)
    {
        flag=0;
        t=s[x]+1;
        for(j=2;j<t;j++)
        {
            if(t%j==0)
            {
                flag=1;
                break;
            }
        }
        if(flag)
            return ;
        for(i=0;i<n;i++)
        {
            if(i!=n-1)
                printf("%d ",s[i]);
            else
                printf("%d
",s[i]); } return ; } for(i=1;i<=n;i++) { if(!vis[i]) { t=i+s[x]; flag=0; for(j=2;j<t;j++) { if(t%j==0) { flag=1; break; } } if(flag==0) { vis[i]=1; s[x+1]=i; dfs(s,x+1,vis); vis[i]=0; } } } } int main() { int num=0; while(scanf("%d",&n)!=EOF) { num++; memset(a,0,sizeof(a)); memset(vis,0,sizeof(vis)); vis[1]=1; a[0]=1; printf("Case %d:
",num); dfs(a,0,vis); printf("
"); } return 0; }