sgu101Domino
给你一些边,假设存在欧拉路径就打出来
我的代码例如以下:
#include<iostream>
#include<cstring>
using namespace std;
int dot[110],vis[110],degree[110],num_side,num_dot,no,road[110][110],st;
struct node
{
int a,b;
}side[110],step[110];
void init()
{
int i;
num_dot=no=0;
memset(degree,0,sizeof(degree));
memset(vis,0,sizeof(vis));
memset(road,0,sizeof(road));
scanf("%d",&num_side);
for(i=0;i<num_side;i++)
{
scanf("%d%d",&side[i].a,&side[i].b);
degree[side[i].a]++,degree[side[i].b]++;
road[side[i].a][side[i].b]++,road[side[i].b][side[i].a]++;
if(!vis[side[i].a])
dot[num_dot++]=side[i].a,vis[side[i].a]=1;
if(!vis[side[i].b])
dot[num_dot++]=side[i].b,vis[side[i].b]=1;
}
}
bool ispath()
{
int sum=0,i;
st=dot[0];
for(i=0;i<num_dot;i++)
if(degree[dot[i]]&1)
{
st=dot[i];
sum++;
if(sum>2)
return 0;
}
return 1;
}
void dfs(int s)
{
int i;
for(i=0;i<num_dot;i++)
if(road[s][dot[i]]>0)
{
road[s][dot[i]]--,road[dot[i]][s]--;
dfs(dot[i]);
step[no].a=s,step[no].b=dot[i],no++;
}
}
void showstep()
{
int i,j,flag;
memset(vis,0,sizeof(vis));
for(i=no-1;i>-1;i--)
for(j=0;j<num_side;j++)
if(!vis[j])
{
if(side[j].a==step[i].a&&side[j].b==step[i].b)
flag=1;
else if(side[j].a==step[i].b&&side[j].b==step[i].a)
flag=2;
else
flag=0;
if(flag!=0)
{
printf("%d %c\n",j+1,flag==1? '+':'-');
vis[j]=1;
break;
}
}
}
int main()
{
init();
if(ispath())
{
dfs(st);
if(no<num_side)
{
printf("No solution\n");
return 0;
}
showstep();
}
else
printf("No solution\n");
}
sgu101Domino的更多相关文章
随机推荐
- LN : leetcode 207 Course Schedule
lc 207 Course Schedule 207 Course Schedule There are a total of n courses you have to take, labeled ...
- CF811C Vladik and Memorable Trip
思路: 令dp[i]表示前i个的最大舒适度.则如果区间[j, i](1 < j <= i)满足条件,有如下转移:dp[i] = max(dp[i], dp[j - 1] + cur).其中 ...
- Unity笔记(3)自学第三天
学习记录: 脚本使用:
- 01按照官方步骤编译NanoPiM1Plus的Android
01按照官方步骤编译NanoPiM1Plus的Android 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/6 10:58 版本:V1.0 ...
- Masonry基础API
Masonry基础API mas_makeConstraints() 添加约束 mas_remakeConstraints() 移除之前的约束,重新添加新的约束 mas_updateConst ...
- 事件的节流(throttle)与防抖(debounce)
事件的节流(throttle)与防抖(debounce) 有些浏览器事件可以在短时间内快速触发多次,比如调整窗口大小或向下滚动页面.例如,监听页面窗口滚动事件,并且用户持续快速地向下滚动页面,那么滚动 ...
- Apache添加到windows服务和移除Apache的windows服务
Apache添加到windows服务和移除Apache的windows服务 Apache免安装版将其添加到Windows服务中: 打开cmd控制台,在上面输入"你的Apache安装目录\bi ...
- mysql导出数据到excel的两种方式
使用第一种方式如果数据中有换行符的话会自动换行,但使用第二种方式就不会出现这种效果了.两种方式自己选择哈 1:select * from into outfile 'c:/Users/a.xls' t ...
- Android 项目Log日志输出优化
概述 Android开发过程中经常需要向控制台输出日志信息,有些人还在用Log.i(tag,msg)的形式或者system.out.println(msg)方式吗?本篇文章对日志信息输出进行优化,以达 ...
- 日本語 IME输入法(Microsoft 输入法)切换问题
平假名 与 片假名之间的切换 按住 Ctrl + Caps Lock(平假名) 按住 Alt + Caps Lock(片假名) 另外:语言之间的切换 Alt + Shift 键 / Windows + ...