poj1300:http://poj.org/problem?id=1300

题意:给你n个房间,房间之间有一些门,房间是按0~~n-进行编号的。然后给出一些房间的之间门,n行,每行的数字表示该们与其它们之间是否有门,而且只表示出比他大的房间号。然后给你一个起点,问你从起点出发,然后经过所有的房间回到0点,房间之间可能有多道门。

题解:题目描述的可能不是很清楚,题目是要求一条欧拉回路。源点是0点,可以从起点到达源点之后,看看能否经过每个房间回到0点。

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int readLine(char *s){
int L;
for(L=;(s[L]=getchar())!='\n'&&s[L]!=EOF;L++);
s[L]=;
return L;
}//取出每一行,并且返回串的长度(包括空格);
int main(){
char buf[];
int i,j,m,n;int door[];
while(readLine(buf)){
if(buf[]=='S'){
sscanf(buf,"%*s%d%d",&m,&n);//读取起点和房间的个数 *%s包第一个字符串吃掉了
for( i=;i<n;i++)
door[i]=;//初始化
int doors=;//记录门的个数
for(i=;i<n;i++){
readLine(buf);//读取一行
int k=;//表示从哪一位开始读取
while(sscanf(buf+k,"%d",&j)==){
doors++;
door[i]++;
door[j]++;
while(buf[k]&&buf[k]==' ')k++;//表示把k移动两位,来读取下一个数
while(buf[k]&&buf[k]!=' ')k++;//
}
}
readLine(buf);//读取END
int even=;//记录偶度点的个数
int odd=;//记录奇度点的个数
for( i=;i<n;i++){
if(door[i]%==)even++;
else
odd++;
}
if(odd==&&m==)//如果起点是0并且没有奇度点直接输出
printf("YES %d\n",doors);
else if(odd==&&door[m]%==&&m!=&&door[]%==)//如果有两个,分别是起点和0,并且起点不是0
printf("YES %d\n",doors);
else
printf("NO\n"); }
if(!strcmp(buf,"ENDOFINPUT"))break;
}
return ;
}

随机推荐

  1. 基于Visual C++2012拆解世界五百强面试题--题3

    请用C语言实现 输入N,打印N*N矩阵 比如 N = 3, 打印: 1 2 3 8 9 4 7 6 5 N = 4, 打印 1   2    3   4 12  13   14  5 11  16   ...

  2. DSPack各种使用方法

    1. DSPack 2.3.4 安装   一. 下载由于sourceforge最近不能访问,所以可以去 http://www.progdigy.com/ 下载.下载 http://www.progdi ...

  3. shell 获取网关 以及修改ip 启用网卡

    shell 获取网关 以及修改ip 启用网卡 #!/bin/bash #autho freefei #script is a init computer eth #data 2014 10 09 19 ...

  4. [RxJS] Combination operator: withLatestFrom

    Operator combineLatest is not the only AND-style combinator. In this lesson we will explore withLate ...

  5. [CodeForce]356D Bags and Coins

    已知有n个包,和总共s个钱币. n,s<=70000. 每个包可以装钱币,还可以套别的包.每个包中的钱数等于 所有套的包的钱数 加上 自己装的钱. 所有的钱都在包内. 问给定每个包中的钱数,输出 ...

  6. web.xml常用标签整理(不定期更新)

    <?xml version="1.0" encoding="UTF-8"?><!-- 标明使用的XML版本和文档编码,此项必须位于第一行,之前 ...

  7. oracle左右连接 完全连接 有效连接 心得总结

    左链接 A表  Left  join  B表  on  条件 示例 A表 B表 SELECT * FROM A  left JOIN B ON A.AID = B.BID; 结果: 左链接查询出来的数 ...

  8. python爬虫scrapy的Selectors参考文档

    http://doc.scrapy.org/en/1.0/topics/selectors.html#topics-selectors-htmlcode

  9. JAVA除去制定字符的方法

    只需调用replaceAll()方法: public class Test { public static void main(String[] args) { String s= "abc ...

  10. Linux命令:chmod命令

    chmod命令:改变文件或目录的存取权限 #权限代号 -r 文件被读取 4 -w 文件被写入 2 -x 文件被执行 1 #权限范围 -u 文件所有者 -g 文件所有者所在组 -o 其他 -a 全部 # ...