UVA 291 The House Of Santa Claus (DFS求一笔画)
题意:从左下方1开始,一笔画出圣诞老人的屋子(不过话说,圣诞老人的屋子是这样的吗?这算是个屋子么),输出所有可以的路径。
思路:贴代码。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue> using namespace std;
int head[],tot=,val;//val:用整型值存储结果,因为最后输出是要按大小排序
int vis[];//用来标记边是否已经走过,若已经走过,则接下来就不能走该条边
int len;//满足一笔画的答案个数
int ans[];//存储答案
struct Edge{
int to,next;
}edge[]; //建立双向边
void add(int u,int v){
edge[tot].next=head[u];
edge[tot].to=v;
head[u]=tot++; edge[tot].next=head[v];
edge[tot].to=u;
head[v]=tot++;
} void init(){
memset(head,-,sizeof(head)); //一开始忘记初始化head了。。。
add(,);add(,);add(,);
add(,);add(,);
add(,);add(,);
add(,);
}
//u:当前走到的点;idx表示已经走过了idx条边,总计需要走完8条边
void dfs(int u,int idx){
if(idx==){
val=val*+u;
ans[len++]=val;
val/=;
return;
}
for(int k=head[u];k!=-;k=edge[k].next){
if(vis[k])
continue; //若第k条边已经走过,则继续尝试其它边
int v=edge[k].to;
/*
因为是双向边,相同端点的会有两条,走过其中一条后,另一条也要标记走过,因为每条边只能走一次,一开始就是这里给忽略了。
若k为偶数,第k边端点为u、v,则第k+1边端点也为u、v,要同时标记走过。
若k为奇数,第k边端点为u、v,则第k-1边端点也为u、v,要同时标记走过。
*/
if(k%==){
vis[k]=;
vis[k+]=;
}
else{
vis[k]=;
vis[k-]=;
}
val=val*+u;
dfs(v,idx+);
//最后要恢复原来的值,不能影响之后的遍历
val=val/;
if(k%==){
vis[k]=;
vis[k+]=;
}
else{
vis[k]=;
vis[k-]=;
}
}
} int main()
{
init();
len=;
memset(vis,,sizeof(vis));
val=;
//从左下角1开始dfs
dfs(,); sort(ans,ans+len);
for(int i=;i<len;i++)
printf("%d\n",ans[i]);
return ;
}
贴个书上的参考程序:
#include <iostream>
#include <string>
#include <cstring>
//因为数据量很小,用邻接矩阵,15ms,而且输出顺序即按照大小顺序排。
using namespace std;
int edge[][];
void makeEdge(){
memset(edge,,sizeof(edge));
for(int i=;i<=;i++){
for(int j=;j<=;j++){
if(i!=j)
edge[i][j]=;
}
}
edge[][]=edge[][]=;
edge[][]=edge[][]=;
}
//目前已画了k条边,准备将x扩展为s的第k+1条边的端点
void dfs(int x,int k,string s){
s+=char(x+'');
if(k==){
cout<<s<<endl;
return;
}
for(int y=;y<=;y++){
if(edge[x][y]){
edge[x][y]=edge[y][x]=;
dfs(y,k+,s);
edge[x][y]=edge[y][x]=;
}
}
}
int main()
{
makeEdge();
dfs(,,"");
return ;
}
UVA 291 The House Of Santa Claus (DFS求一笔画)的更多相关文章
- UVA 291 The House Of Santa Claus DFS
题目: In your childhood you most likely had to solve the riddle of the house of Santa Claus. Do you re ...
- UVA 291 The House Of Santa Claus(DFS算法)
题意:从 节点1出发,一笔画出 圣诞老人的家(所谓一笔画,就是遍访所有边且每条边仅访问一次). 思路:深度优先搜索(DFS算法) #include<iostream> #include&l ...
- UVa 291 The House Of Santa Claus——回溯dfs
题意:从左下方的1开始,一笔画出圣诞老人的房子. #include <iostream> #include <cstring> using namespace std; ][] ...
- E. Santa Claus and Tangerines
E. Santa Claus and Tangerines time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- codeforces 748E Santa Claus and Tangerines
E. Santa Claus and Tangerines time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) D. Santa Claus and a Palindrome STL
D. Santa Claus and a Palindrome time limit per test 2 seconds memory limit per test 256 megabytes in ...
- Codeforces Round #389 (Div. 2, Rated, Based on Technocup 2017 - Elimination Round 3) E. Santa Claus and Tangerines
E. Santa Claus and Tangerines time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- Codeforces Round #389 Div.2 E. Santa Claus and Tangerines
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- Codeforces Round #389 Div.2 D. Santa Claus and a Palindrome
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
随机推荐
- android 数据库的增删改查的另一种方式
老师笔记 # 3 Android下另外一种增删改查方式 1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用Sq ...
- OC 内存管理机制总结
OC 内存管理机制总结 一:OC内存管理机制目前分为两块,其一自动内存管理机制,其二手动内存管理机制: 1.首先我们从自动内存管理机制讲起: 1)什么是自动内存管理机制,自动内存管理机制就是程序中所创 ...
- Windows Server 2008 R2(x64) IIS7+PHP5(FastCGI)环境搭建
相关软件下载: 1.PHP下载地址: http://windows.php.net/downloads/releases/php-5.4.4-nts-Win32-VC9-x86.zip 如果是win2 ...
- setLayoutParams设置leftMargin后在模拟器上可以真机上不行
LinearLayout.LayoutParams lp = getLayoutParamsFromExit( (LayoutParams) this.getLayoutParams()); ...
- php生成txt文件换行问题
用双引号即"\r\n"换行,不能用单引号即'\r\n'.
- 防火墙设置:虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)
我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机. 我的操作是:关 ...
- Python脚本控制的WebDriver 常用操作 <二十七> 文件下载
测试用例场景 webdriver允许我们设置默认的文件下载路径.也就是说文件会自动下载并且存在设置的那个目录中. Python脚本 测试用Python代码: # coding=gbk ''' Crea ...
- hdu 2837 Calculation 指数循环节套路题
Calculation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- ASP.NET 运行机制续(完结)
上一篇说到applicationInstance会执行一些列的事件.下面是我在msdn上找到有关asp.net程序生命周期相关的描述及图片 声明周期的起始 ASP.NET 应用程序的生命周期以浏览器向 ...
- DB天气app冲刺二阶段第四天
今天就进度来说没有丝毫进度..考虑直接把数据库文件弄到代码里.因为每次挑选城市的时候都有时会出bug ,所以我想明天试一下看看是不是这个的问题,虽然工程量有点大,但是应该不困难,所以明天试一下需要. ...