• (step4.3.5)hdu 1501(Zipper——DFS)


    题目大意:是给定3个字符串,问前两个是否能够组成第3个字符串。此题是个非常经典的dfs题.


    解题思路:DFS


    代码如下:有详细的注释

    /*
     * 1501_2.cpp
     *
     *  Created on: 2013年8月17日
     *      Author: Administrator
     */
    
    #include <iostream>
    using namespace std;
    
    char str1[201], str2[201], str3[401];
    int len1, len2, len3;
    bool flag;
    bool hash[201][201];
    
    /**
     * str1、str2、str3分别用来保存第1、2、3个字符串
     * len1、len2、len3分别是第1、2、3个字符串的长度
     * flag : 判断是否有解
     * hash[][] :判断是否已经访问过
     */
    void dfs(int a, int b, int c) {
    	if (flag) {
    		return;
    	}
    
    	if (c == len3) {
    		flag = true;
    		return;
    	}
    
    	if (hash[a][b]) {
    		return;
    	}
    
    	hash[a][b] = true;//这个千万不要漏了...表示这种组合已经试过
    	if (str1[a] == str3[c]) {//如果str1第a个位置上的字符与str2第c个位置上的字符相等
    		dfs(a + 1, b, c + 1);
    	}
    
    	if (str2[b] == str3[c]) {//如果str2第b个位置上的字符和str2第c个位置上的字符相等
    		dfs(a, b + 1, c + 1);
    	}
    }
    
    int main() {
    	int t;
    
    	scanf("%d", &t);
    	int count = 1;
    	int i;
    	for( i = 1 ;i <= t ; ++i){
    		flag = false;
    		memset(hash, 0, sizeof(hash));
    		scanf("%s%s%s", str1, str2, str3);
    
    		len1 = strlen(str1);
    		len2 = strlen(str2);
    		len3 = strlen(str3);
    		if (len1 + len2 != len3) {
    			printf("Data set %d: no
    ",count++);
    			continue;
    		}
    
    		dfs(0, 0, 0);
    		printf("Data set %d: %s
    ", count++,flag?"yes":"no");
    
    	}
    }
    



  • 相关阅读:
    struts2中<s:select>标签的使用
    正则表达式(括号)、[中括号]、{大括号}的区别小结
    解读邮箱正则表达式:^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$
    Struts2国际化-getText()方法
    Eclipse的Tomcat热部署,免重启的方法
    hdu 5056Boring count
    纸板上的虚拟现实和代码中的Cardboard
    OC-Protocol实现业务代理
    UVA 11237
    mysql相关日志汇总
  • 原文地址:https://www.cnblogs.com/james1207/p/3265185.html
走看看 - 开发者的网上家园