c-采用深度优先搜索进行扑克牌的排序

问题描述

采用深度优先搜索进行扑克牌的排序
 #include<iostream>
using namespace std;
int count=0;
int book[5];
char card[5][2]={'2','C','A','D','A','C','J','C','J','H'};
char a[5][2];
void dfs(int step){
    if(step==5){
            count++;
            return ;
    }
    for(int i=0;i<5;i++){
        if(/*a[step][0]!=a[step-1][0]&&*/book[i]==0){//判断条件该牌未被标记且与上一张的牌号不相同,但我不知道应该如何写出这条判断语句,如果我将其注释掉,则输出120,是一个全排列。如果不注释,则输出为0.
            a[step][0]=card[i][0];
            book[i]=1;//将用过的牌标记
            dfs(step+1);
            book[i]=0;//取消标记
        }
    }
    return ;
}
int main(){
    dfs(0);
    cout<<count<<endl;
    return 0;
}



我未按照题目要求,只是给出了特定的扑克牌进行算法可行性的验证,如第三组数据所示,该程序应输出48.
现在的问题是不知如何进行条件的判断。悉心向各位请教

解决方案

你就全排列出所有的组合模式,另外添加一个函数 bool isDifferenSequence(char compsite[][]),每种组合放进去判断一下,不是很简单么。
bool isDifferentSequence(char seq[][])
{
for(int i = 0;i<4;i++)
{
if (seq[i][0] == seq[i+1][0])
return false;
}
return true;
}

另外你自己的代码,step明明是从0开始计数的,下标似乎有-1了吧?不会报错么?

时间: 2024-10-04 20:07:27

c-采用深度优先搜索进行扑克牌的排序的相关文章

图的遍历之深度优先搜索和广度优先搜索

深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似. 它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到.  若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止. 显然,深度优先搜索是一个递归的过程. 2. 深度优先搜索图解 2.

关于求迷宫最短路径(利用深度优先搜索)的问题

问题描述 关于求迷宫最短路径(利用深度优先搜索)的问题 利用深度优先查找迷宫的最短路径的程序,哪位大神可以帮帮忙吗? 解决方案 迷宫最短路径问题 解决方案二: http://bbs.csdn.net/topics/330218304 解决方案三: http://www.cnblogs.com/GoAhead/archive/2012/09/29/2708673.html

人工智能: 自动寻路算法实现(二、深度优先搜索)

前言 本篇文章是机器人自动寻路算法实现的第二章.我们要讨论的是一个在一个M×N的格子的房间中,有若干格子里有灰尘,有若干格子里有障碍物,而我们的扫地机器人则是要在不经过障碍物格子的前提下清理掉房间内的灰尘.具体的问题情景请查看人工智能: 自动寻路算法实现(一.广度优先搜索)这篇文章,即我们这个系列的第一篇文章.在上一篇文章里,我们介绍了通过广度优先搜索算法来实现扫地机器人自动寻路的功能.在这篇文章中,我们要介绍与之相对应的另一种算法:深度优先搜索算法. 项目下载地址 正文 算法介绍 深度优先算法

基于图的深度优先搜索和广度优先搜索java实现

 为了解15puzzle问题,了解了一下深度优先搜索和广度优先搜索.先来讨论一下深度优先搜索(DFS),深度优先的目的就是优先搜索距离起始顶点最远的那些路径,而广度优先搜索则是先搜索距离起始顶点最近的那些路径.我想着深度优先搜索和回溯有什么区别呢?百度一下,说回溯是深搜的一种,区别在于回溯不保留搜索树.那么广度优先搜索(BFS)呢?它有哪些应用呢?答:最短路径,分酒问题,八数码问题等.言归正传,这里笔者用java简单实现了一下广搜和深搜.其中深搜是用图+栈实现的,广搜使用图+队列实现的,代码如下

【算法导论】图的深度优先搜索遍历(DFS)

        关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS).         深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点,依次类推,尽可能向纵深方向搜索,所以称为深度优先搜索遍历.显然这种搜索方法具有递归的性质.图的BFS和树的搜索遍历很类似,只是其存储方式不同.         其基本思想为:从图中某一顶点vi出发,访问此顶点,并进行标记,然后依次搜索vi的每个邻接点vj:若vj未被访

算法起步之深度优先搜索

原文:算法起步之深度优先搜索        说完广度优先搜索后,我们来看图的另一种遍历形式,深度优先搜索算法,深度优先总是对刚发现的节点的出阿发边进行探索,直到该节点的所有出发边都被发现为止.一旦所有的出发边都被发现,搜索就回溯到前驱结点,来搜索前驱结点的出发边.反复进行直到全部遍历.我们用递归跟栈两种方式进行实现,其实归根到底递归也是栈实现的.        递归实现:   public class DFS { private boolean[] visited; public void df

【算法导论】有向图的深度优先搜索遍历

        在前面的文章中,我已经讨论了无向图的遍历,现在发现在有向图中,可能会发生无法遍历到所有节点的情况.因此在经历一次深度优先搜索遍历后,如果还存在未被搜索到的节点,则需要再从新的节点开始进行深度优先搜索遍历,直到访问完所有节点. 以下面的有向图为例:         如果从a开始进行深度优先搜索遍历,则会得到  a b c d h g f 后结束,因此我们还要 从未访问到的节点e进行第二次深度优先搜索遍历得到e.在前面的深度优先搜索的基础上,有向图的深度优先搜索程序实现如下: #in

C++深度优先搜索的实现方法_C 语言

本文实例讲述了图的遍历中深度优先搜索的C++实现方法,是一种非常重要的算法,具体实现方法如下: 首先,图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次.注意到树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历.图的遍历主要有两种算法:广度优先搜索(Breadth-First-Search)和深度优先搜索(Depth-First-Search). 一.深度优先搜索(DFS)的算法思想 深度优先搜索算法所遵循的搜索策略是尽可能"深&

新浪百度达成合作 新浪无线全面采用百度搜索

中介交易 SEO诊断 淘宝客 云主机 技术大厅 [导读]百度与新浪在合作层面由来已久,双方在网页搜索领域合作多年,由百度提供专业搜索技术,而后在乐居.地图.数据开放平台上有多次合作. 新浪无线全面采用百度搜索 爱问搜索结果呈现(腾讯科技配图) 腾讯科技讯(乐天)7月30日消息,新浪与百度今日宣布在无线领域达成战略合作,双方将在搜索.内容.平台.技术.资源等五个方面展开合作.日前,手机新浪网已全面采用百度提供的网页搜索服务.这是继苹果后,又一知名企业在无线搜索领域与百度达成全面合作. 据了解,百度