【一笔画】问题 详解

这道题,初看觉得只是一般的图论问题,不过深究起来,还真是有点意思啊~(经过N次WA试验后得出的结论)话不多说,先看看题目:1001: 一笔画Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldDescription对给定的一个无向图,判断能否一笔画出。若能,输出一笔画的先后顺序,否则输出“No Solution!”...
摘要由CSDN通过智能技术生成

这道题,初看觉得只是一般的图论问题,不过深究起来,还真是有点意思啊~(经过N次WA试验后得出的结论)
话不多说,先看看题目:

1001: 一笔画

Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Description
对给定的一个无向图,判断能否一笔画出。若能,输出一笔画的先后顺序,否则输出“No Solution!”
所谓一笔画出,即每条边仅走一次,每个顶点可以多次经过。
输出字典序最小的一笔画顺序。
Input
包含多组测试数据。
第一行n,m,有n个点,m条边,以下m行描述每条边连接的两点。(n<=100)
Output
每组测试数据占一行。一笔画的先后顺序,每个顶点之间用一个空格分开。

如果不能完成一笔画,则输出“No Solution!”

Sample Input
3 3
1 2
1 3
2 3
5 5
1 2
2 3
3 4
4 5
5 1

Sample Output
1 2 3 1
1 2 3 4 5 1


这道题其实是由一道最普通的一笔画图论问题延伸而来的。特别之处在于:
1.需要你在无解情况下输出“No Solution!”。
2.要求你在有多种解的情况下输出字典序最小的一组。

先撇开这道题,看看没有这两点要求下的代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 101
int g[maxn][maxn];//二维数组进行链式储存
int du[maxn];//记录每个点的度,以便于最终判断奇点数目
int circuit[maxn];//记录欧拉路的路径
int n,e,circuitpos,i,j,x,y,start;
void find_circuit(int i)
{
   
    int j;
    for(j=1;j<=n;j++)
    if(g[i][j]==1){
   g[i][j]=g[j][i]=0;find_circuit(j);}//这个点搜寻完毕,标记搜寻后继续寻找以j为起点的剩下边
    circuit[++circuitpos]=i;//记录路径
}
int main()
{
   
    while(cin>>n>>e)
    {
   
        memset(g,0,sizeof g);memset
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值