zoukankan      html  css  js  c++  java
  • 奋战杭电ACM(DAY11)1016

    DFS加回溯微笑

    具体见注释微笑

    Prime Ring Problem

    #include <iostream>
    using namespace std;
    
    int n,circle[20],p[20];
    bool visited[20];
    int prime[]={1,3,5,7,11,13,17,19,23,29,31,37};//建立素数表,避免每次判断,减少时耗
    
    void print(int x)
    {
    	for(int i=1; i<x; i++)
    		cout << circle[i] << " ";
    	cout << circle[x] << endl;//最后一个数后面没有空格,PE一次……
    }
    
    bool ifprime ( int y)
    {
    	for(int i=0; i<12; i++)
    	{
    		if(y==prime[i])
    			return true;
    	}
    	return false;
    }
    
    
    void dfs(int t)
    {
    	if(t>n) {print(n);return;}
    	for(int i=2; i<=n; i++)
    	{
    		if(visited[i]==true) continue;
    		visited[i]=true;
    		circle[t]=p[i];
    		if(t==n)
    		{
    			if(ifprime(circle[t]+circle[t-1]) && ifprime(circle[t]+1))
    				dfs(t+1);}
    		else
    		{if(ifprime(circle[t]+circle[t-1])) dfs(t+1);}
    		visited[i]=false;
    	}
    }
    
    
    int main()
    {
    	int num =0;
    	while(cin >> n)
    	{	
    		num +=1;
    		memset(circle,0,sizeof(circle));
    		memset(visited,false,sizeof(visited));
    		for(int i=0; i<20; i++)
    			p[i]=i;
    		circle[1]=1;
    		visited[1]=true;
    		cout << "Case " << num << ":" << endl;
    		dfs(2);
    		cout << endl;
    	}
    	return 0;
    }
    


  • 相关阅读:
    Leetcode 532.数组中的K-diff数对
    Leetcode 529.扫雷游戏
    定增游戏(三)
    套利不归路(五)
    定增游戏(一)
    套利不归路(四)
    套利不归路(三)
    套利不归路(二)
    套利不归路(一)
    减持大逃亡(二)
  • 原文地址:https://www.cnblogs.com/ques3512012019/p/3300159.html
Copyright © 2011-2022 走看看