#include <fstream>
#include <vector>
#include <assert.h>
#include <windows.h>
using namespace std;
unsigned short PointTable[65536]={0};//顶点出现次数表
int _tmain(int argc, _TCHAR* argv[])
{
int line[1024][2];
ifstream in("in.txt");
assert(in);
int nLen=0;//绳子数
int nPtnum=0;//不同的顶点数
int nOdd=0;//奇顶点数
vector<POINT> lineSet;
int result=0;
while(!in.eof())
{
POINT pt;
in>>pt.x;
if(in>>pt.y){
lineSet.push_back(pt);
++PointTable[pt.x];
if(PointTable[pt.x]%2==1)//为奇数
nOdd++;
else
nOdd--;
++PointTable[pt.y];
if(PointTable[pt.y]%2==1)
nOdd++;
else
nOdd--;
}
}
//连通性判断
vector<int> PointSet;
PointSet.push_back(lineSet[0].x);
PointTable[lineSet[0].x]=0;
if(lineSet[0].x!=lineSet[0].y){
PointSet.push_back(lineSet[0].y);
PointTable[lineSet[0].y]=0;
}
lineSet.erase(lineSet.begin());
while(PointSet.size()){
for(int i=0;i<lineSet.size();i++){
if(lineSet[i].x==PointSet[0]){//两线相连
if(PointTable[lineSet[i].y]){//本顶点未出现过
PointSet.push_back(lineSet[i].y);//加入搜索集
PointTable[lineSet[i].y]=0;
}
lineSet.erase(lineSet.begin()+i);//排除该线
i--;//正确转下一条线
}
else if(lineSet[i].y==PointSet[0]){//两线相连
if(PointTable[lineSet[i].x]){//本顶点未出现过
PointSet.push_back(lineSet[i].x);//加入搜索集
PointTable[lineSet[i].x]=0;
}
lineSet.erase(lineSet.begin()+i);//排除该线
i--;//
}
}
PointSet.erase(PointSet.begin());
}
if(lineSet.size()==0//是连通图
&&(nOdd==0||nOdd==2))
result=1;
printf("结果为%d",result);
return 0;
}