初试DFS之HDU1016

简介: DFS和BFS是基础算法,可怜我现在才开始接触,不争气......

DFS和BFS是基础算法,可怜我现在才开始接触,不争气......

DFS入门题之HDU1016

提交7次才AC,前期四次超时,后期两次格式错误。

先贴上AC代码:

#include<iostream>
using namespace std;
int a[25],book[25],n,Case=1;
bool IsPrime[40]= {false,true,true,true,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false};
void dfs(int step)
{
    if(step==n+1&&IsPrime[a[1]+a[n]])
    {
        for(int i=1; i<n; i++)
            cout<<a[i]<<' ';
        cout<<a[n]<<endl;
        return ;
    }
    for(int i=2; i<=n; i++)
        if(book[i]==0&&IsPrime[i+a[step-1]])
        {
            a[step]=i;
            book[i]=1;
            dfs(step+1);
            book[i]=0;
        }
    return ;
}
int main()
{
    a[1]=1;
    while(cin>>n)
    {
        cout<<"Case "<<Case++<<':'<<endl;
        dfs(2);
        cout<<endl;
    }
    return 0;
}

强迫症版本:

#include<iostream>
using namespace std;
int a[25],book[25],n,Case=1;
bool IsPrime[40]= {false,true,true,true,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,true,false,false,false,true,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,false};
int dfs(int step)
{
    if(step==n+1&&IsPrime[a[1]+a[n]])
    {
        for(int i=1; i<n; i++)
            cout<<a[i]<<' ';
        cout<<a[n]<<endl;
    }
    for(int i=2; i<=n; i++)
        if(book[i]==0&&IsPrime[i+a[step-1]])
        {
            a[step]=i;
            book[i]=1;
            dfs(step+1);
            book[i]=0;
        }
    return 1;
}
int main()
{
    a[1]=1;
    while(cin>>n&&cout<<"Case "<<Case++<<':'<<endl&&dfs(2))
        cout<<endl;
    return 0;
}

题目很简单,意思也很容易理解,写出几个要注意的地方,望以后能对看到这篇帖子的入门小伙伴提供帮助。
①此题判断两数之和是否为质数,不可直接写函数一一判断,否则会超时。
注意题目说明n最大为20,那么两数相加之和最多也才只有38种情况,完全可以将所有情况预先判断好,存在数组IsPrime[]。
②注意输入输出,输出每种结果最后一个数后不可加空格,否则会提示Wrong Answer。

目录
相关文章
|
机器学习/深度学习 Java
【Java每日一题,深度搜索dfs】棋盘问题
【Java每日一题,深度搜索dfs】棋盘问题
|
3月前
lanqiao OJ 207 大臣的旅费(两次dfs)
lanqiao OJ 207 大臣的旅费(两次dfs)
15 0
|
8月前
|
存储 人工智能 BI
【每日一题Day216】LC1377 T 秒后青蛙的位置 | BFS DFS
【每日一题Day216】LC1377 T 秒后青蛙的位置 | BFS DFS
61 0
UVa302 - John's trip(并查集、欧拉回路、DFS)
UVa302 - John's trip(并查集、欧拉回路、DFS)
57 0
|
机器学习/深度学习 算法
算法每日一题:P2089 烤鸡 -DFS练习
算法每日一题:P2089 烤鸡 -DFS练习
2019CCPC秦皇岛HDU - 6736 F - Forest Program(dfs找环 组合数学)
2019CCPC秦皇岛HDU - 6736 F - Forest Program(dfs找环 组合数学)
103 0
CodeForces 377A-Maze(DFS找连通块)
CodeForces 377A-Maze(DFS找连通块)
CodeForces 377A-Maze(DFS找连通块)
|
定位技术 C++
HDU-1253,胜利大逃亡(DFS)
HDU-1253,胜利大逃亡(DFS)
|
机器学习/深度学习
HDU-2553,N皇后问题(DFS+回溯)
HDU-2553,N皇后问题(DFS+回溯)
|
安全 定位技术
洛谷P2802-回家(DFS)
洛谷P2802-回家(DFS)

热门文章

最新文章