zoj 1395 可行遍性问题
2015-11-13 17:12
351 查看
题目连接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1395
对于无向图的可行遍性问题。
无向图G是仅有两个奇结点的连通图,且G的欧拉通路以此两个端点为端点。
G是无奇结点的连通图是,必有欧拉回路。
这道题的难点在于数据处理。
我是这样处理的
关于sscanf,我是第一次用。它能从一个字符串中读入与指定格式相符的数据。
%*s,%*d表示跳过这种数据不读。
对于无向图的可行遍性问题。
无向图G是仅有两个奇结点的连通图,且G的欧拉通路以此两个端点为端点。
G是无奇结点的连通图是,必有欧拉回路。
这道题的难点在于数据处理。
我是这样处理的
int readline(char s[]) { int i=0; for(i=0;(s[i]=getchar())!='\n'&&s[i]!=EOF;i++); s[i]=0; return i; }
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int readline(char s[]) { int i=0; for(i=0;(s[i]=getchar())!='\n'&&s[i]!=EOF;i++); s[i]=0; return i; }
int main()
{
//freopen("in.txt","r",stdin);
char buf[200];
int doors=0;
int m,n;
int door[25];
while(readline(buf))
{
if(buf[0]=='S')
{
doors=0;
sscanf(buf,"%*s%d%d",&m,&n);
memset(door,0,sizeof(door));
for(int i=0;i<n-1;i++)
{
readline(buf);
int k=0;
int b;
while(sscanf(buf+k,"%d",&b)==1) //若从buf+k读取到了一个数据
{
doors++;
//cout<<b;
door[i]++;
door[b]++;
while(buf[k]&&buf[k]==' '){
k++;
}
while(buf[k]&&buf[k]!=' ') {
k++;
}
}
}
readline(buf);
int odd=0;
int even=0;
for(int i=0;i<n;i++)
{
if(door[i]%2==0) even++;
else odd++;
}
if(odd==0&&m==0) printf("YES %d\n",doors);
else if(odd==2&&door[0]%2==1&&door[m]%2==1&&m!=0)
printf("YES %d\n",doors);
else
printf("NO\n");
}
else if(!strcmp(buf,"ENDOFINPUT"))
break;
}
return 0;
}
关于sscanf,我是第一次用。它能从一个字符串中读入与指定格式相符的数据。
%*s,%*d表示跳过这种数据不读。
相关文章推荐
- zabbix采集软件指标实现方法
- 浅谈strtok函数的使用心得
- ios NSString md5 base64 urlEncode isEmail
- “undefined JNI_GetCreatedJavaVM”和“File format not recognized”错误原因分析
- oto餐饮app实时订单物流追踪系统架构设计(一)
- 快速将自己的应用程序做成安装包
- pes and ts stream, how to convert
- Android自定义图片加载框架
- 操作系统7- shell
- 浅析Python中signal包的使用
- 获取Android设备电池电量状态
- 使用友盟分享,出现linker command failed with exit code 1
- Python 私有变量、私有方法、类变量与实例变量
- Hibernate映射之多对多映射(五)
- 号码验证
- BaseAdapter适配器view缓存
- Oracle 中count(1) 和count(*) 的区别
- Objective-C 笔记一(HelloWorld)
- Hibernate中Criteria的用法
- JDBC--获取数据库连接