初试DFS之HDU1016

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。

时间: 2024-09-24 21:15:32

初试DFS之HDU1016的相关文章

HDU1016 DFS

                          Prime Ring Problem                               Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)                                                 Total Submission(s): 14601 Accepted Submission

uva 10422 - Knights in FEN ID+dfs

10422 - Knights in FEN        经典的棋盘类问题,移动骑士到达指定状态,最少要几次,如果超过10次则输出Unsolvable in less than 11 move(s).        一开始想bfs的,但是状态量比较大,又懒得写hash,又想到了最坏情况,也就是超出10次时,dfs和bfs复杂度都一样,于是就果断用了ID+dfs,编程难度非常低.      不用加剪枝就可以过了,我的代码里加了个最优下限,这样不用每次从0开始进行ID,刚有想到可以利用当前最优情况

hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)

/************************************************************************* > File Name: j.cpp > Author: HJZ > Mail: 2570230521@qq.com > Created Time: 2014年08月28日 星期四 12时26分13秒 *******************************************************************

迷宫求解非递归 DFS BFS(应用栈和队列)

栈和队列的应用对迷宫问题求解 没有递归 自己手动建的栈和队 并且输出路径 DFS的路径就是 栈中的坐标 BFS的路径在队又开了一个域存上一层的base值 语言还是用的C++ 感觉比C的封装性好很多 充分体会了一下DFS一边比BFS快 但是BFS是最优解而DFS可能不是最优解   #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace

如何实现图的BFS和DFS

图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS),因此不再对图的基本概念做过多的介绍,但是要先大致了解下图的几种常见的存储结构. 邻接矩阵 邻接矩阵既可以用来存储无向图,也可以用来存储有向图.该结构实际上就是用一个二维数组(邻接矩阵)来存储顶点的信息和顶点之间的关系(有向图的弧或无向图的边).其描述形式如下: //图的邻接矩阵存储表示 #define MAX_NUM 20 // 最大顶点个数 enum GraphKind{GY,GN}; // {有向图,无向图} t

Server 2003 DFS客户端设置及安全策略

除了Windows Server 2003家族中基于服务器的DFS(分布式文件系统)组件外,还有基于客户端的DFS组件.DFS客户端可以将对DFS根目录或DFS链接的引用缓存一段时间,该时间由管理员指定.DFS客户端组件可以在许多不同的Windows平台上运行.Windows Server 2003 家族产品支持下列平台上的目标. 一.从其他计算机访问DFS目标 表1 支持DFS的操作系统列表 DFS映射以及客户端计算机访问DFS服务器的过程 DFS映射 默认情况下,DFS映射将自动发布到活动目

分布式文件DFS共享文件不能访问的问题

域控服务器今天出现蓝屏,没办法只能强制重新启动,经过漫长的启动,总算启动好了,不过没几分钟,其他部门就来反映访问不了共享文件,错误提示如下 我看了一下文件共享和服务都打开,没什么问题,但是死活 访问不了,换名字试试,结果可以!!!??? 名字换回来依旧访问不了,会不会DFS出问题了? 打开DFS发现原本发布的共享文件 根目录消失了,点击显示根目录,提示根目录不可用..... 新建根目录,提示根目录已存在,不能新建... 看来问题出在DFS上面,换名字的话,治标不治本,而且客户端工作量巨大,看来要

AD部署教程:分布式文件系统(DFS)(命名空间)

分布式文件系统(DFS,Distributed File System)是文件服务非常重要的一个功能,DFS使用户更加容易访问和管理物理上跨网络分布的文件. 通过DFS,可以将同一网络中的不同计算机上的共享文件夹组织起来,形成一个单独的.逻辑的.层次式的共享文件系统. 在文件服务中直接添加DFS分布式文件系统即可 打开服务器管理可以看到文件服务多了DFS管理右键命名空间,可以打开新建命名空间向导来新建命名空间服务器. 接着是命名空间的名字

UVa 10603:Fill,经典倒水问题+隐式图搜索+dfs

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=110&page=show_problem&problem=1544 类型: 隐式图搜索 原题: There are three jugs with a volume of a, b and c liters. (a, b, and c are positive integers not greater th