初试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。

目录
相关文章
|
数据采集 自然语言处理 搜索推荐
图文详解 DFS 和 BFS | 算法必看系列知识二十四
深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在高频面试题中。
32220 4
图文详解 DFS 和 BFS | 算法必看系列知识二十四
|
6月前
|
存储 人工智能 BI
【每日一题Day216】LC1377 T 秒后青蛙的位置 | BFS DFS
【每日一题Day216】LC1377 T 秒后青蛙的位置 | BFS DFS
52 0
《蓝桥杯每日一题》dfs·AcWing3502. 不同路径数
《蓝桥杯每日一题》dfs·AcWing3502. 不同路径数
68 0
|
机器学习/深度学习 算法
算法每日一题:P2089 烤鸡 -DFS练习
算法每日一题:P2089 烤鸡 -DFS练习
|
算法 JavaScript
好的,DFS,也学废了!
没错,本篇是上一篇《好的,BFS,又学废了!》的姊妹篇,意在通过简单回顾拾起学了忘、又忘了学的基础数据结构; DFS,全称是:深度优先遍历(Depth_First_Search),通常和 BFS 广度优先遍历(Breadth-first search)对比理解学习;
|
测试技术 定位技术
杭电1044java实现dfs bfs
它写在“夫人的书:创世之后,残酷的神摩洛克反抗了造物主马尔杜克的权威。摩尔从马尔杜克那里偷走了众神中所有神器中最强大的一件,也就是叶多尔的护身符,并且他隐藏了它在Gehennom的阴暗洞穴,现在潜伏在他身边的Under World,并且是他的时间。
93 0
|
定位技术 C++
HDU-1253,胜利大逃亡(DFS)
HDU-1253,胜利大逃亡(DFS)
洛谷P1331-海战(简单的DFS)
洛谷P1331-海战(简单的DFS)