dfs(简单例题)
2015-08-04 23:33
225 查看
基本思想:从初始状态S开始,利用规则生成搜索树下一层任一个结点,检查是否出现目标状态G,若未出现,以此状态利用规则生成再下一层任一个结点,再检查是否为目标节点G,若未出现,继续以上操作过程,一直进行到叶节点(即不能再生成新状态节点),当它仍不是目标状态G时,回溯到上一层结果,取另一可能扩展搜索的分支。生成新状态节点。若仍不是目标状态,就按该分支一直扩展到叶节点,若仍不是目标,采用相同的回溯办法回退到上层节点,扩展可能的分支生成新状态,…,一直进行下去,直到找到目标状态G为止
/*hdu--变形课*/
/*hdu--变形课*/
#include<stdio.h> #include<string.h> struct stu { char x; char y; }point[1000]; int head[1000]; int k; int flag; void find(char c) { int i; char temp; if(c=='m') { flag=1; return; }//如果找到了,直接回溯,不需要再向右移动 for(i=1;i<k;i++) { if(head[i]==0&&point[i].x==c) { temp=c; c=point[i].y; head[i]=1;//标记已经找过得 find(c); head[i]=0;//回溯取消标记,根据题意,此处也可以删去,(模板为需要); c=temp; } } } int main() { char a[100]; int i,l; k=1; while(gets(a)!=NULL) { if(strcmp(a,"0")==0) { flag=0; find('b'); if(flag)printf("Yes.\n"); else printf("No.\n"); k=1; } else { l=strlen(a); point[k].x=a[0]; point[k].y=a[l-1]; head[k++]=0; } } return 0; }
相关文章推荐
- 网络流入门总结(EK算法)
- [2015-08-04] python015
- Merge Two Sorted Lists
- LitJson处理Json
- C++中max_element和min_element
- <section></section>标签
- UVA 1619 动态规划
- svn服务器创建并提交代码
- 指针和引用作为参数的区别
- 【Android适配器系列】BaseAdapter学习笔记
- centOS6下vsftp服务配置
- Cocos2dX精灵类的封装
- 数组
- 《黑客与画家》读书笔记
- iOS 8设置CLLocation授权
- IO异常 的处理 test
- 初窥Python(二)——修改pip源
- 【JAVA】final修饰Field
- OC基础学习第一天
- 快速排序