关键词:
1 #include <iostream> 2 #include <cstdio> 3 #include <set> 4 #include <cstring> 5 6 using namespace std; 7 8 const int maxn=1000; 9 int UG[maxn][maxn]; 10 int vis[maxn]; 11 char str[1024]; 12 int in[maxn]; 13 int out[maxn]; 14 set<int> s; 15 unsigned dfs_num=0; 16 17 void dfs(int u) 18 { 19 vis[u]=1; 20 dfs_num++; 21 22 for(int i=0;i<=‘z‘-‘a‘;i++) 23 if(UG[u][i]) 24 if(!vis[i]) 25 dfs(i); 26 } 27 28 int main() 29 { 30 s.clear(); 31 memset(UG,0,sizeof(UG)); 32 memset(vis,0,sizeof(vis)); 33 memset(in,0,sizeof(in)); 34 memset(out,0,sizeof(out)); 35 36 int n; 37 38 scanf("%d",&n); 39 40 while(n--) 41 { 42 memset(str,0,sizeof(str)); 43 scanf("%s",str); 44 45 printf("----%s--- ",str); 46 47 48 if(s.count(str[0]-‘a‘)==0) 49 s.insert(str[0]-‘a‘); 50 if(s.count(str[strlen(str)-1]-‘a‘)==0) 51 s.insert(str[strlen(str)-1]-‘a‘); 52 53 UG[str[0]-‘a‘][str[strlen(str)-1]-‘a‘]++; 54 UG[str[strlen(str)-1]-‘a‘][str[0]-‘a‘]++; 55 56 out[str[0]-‘a‘]++; 57 in[str[strlen(str)-1]-‘a‘]++; 58 } 59 60 //find odd 61 62 //if have odd out return it 63 //if have odd in return it 64 65 printf("%d ",s.size()); 66 67 int num1=0; 68 int num2=0; 69 70 for(int i=0;i<=‘z‘-‘a‘;i++) 71 { 72 i==0? printf("in:%d",in[i]):printf(" %d",in[i]); 73 } 74 75 cout<<endl; 76 77 for(int i=0;i<=‘z‘-‘a‘;i++) 78 i==0? printf("out:%d",out[i]):printf(" %d",out[i]); 79 80 cout<<endl; 81 82 83 //计算多少个入度不等于出度 84 for(int i=0;i<‘z‘-‘a‘;i++) 85 if(in[i]!=out[i]) num1++; 86 87 88 //大于两个就有问题 89 if(num1>2) 90 { 91 cout<<"NO"<<endl; 92 return 0; 93 } 94 95 96 //有多少个入度不等于出度的0个? 97 98 99 if(num1==0) 100 { 101 for(int i=0;i<‘z‘-‘a‘;i++) 102 { 103 if(s.count(i)) 104 { 105 dfs(i); 106 107 if(s.size()==dfs_num) 108 { 109 cout<<"YES"<<endl; 110 111 return 0; 112 } 113 else 114 { 115 cout<<"NO"<<endl; 116 117 return 0; 118 } 119 } 120 } 121 } 122 123 124 //大于两个,进一步判断是否满足条件 125 if(num1==2) 126 { 127 for(int i=0;i<‘z‘-‘a‘;i++) 128 if(in[i]!=out[i]) 129 { 130 num2=num1; 131 num1=i; 132 } 133 134 printf("num1:%d ",num1); 135 printf("num2:%d ",num2); 136 137 if((in[num1]==out[num1]+1 && in[num2]+1==out[num2]) || (in[num2]==out[num2]+1 && in[num1]+1==out[num1])) 138 { 139 for(int i=0;i<‘z‘-‘a‘;i++) 140 if(s.count(i)) 141 { 142 143 //标记所有节点判断是否连通 144 dfs(i); 145 146 if(s.size()==dfs_num) cout<<"YES"<<endl; 147 else 148 cout<<"NO"<<endl; 149 150 return 0; 151 } 152 } 153 else 154 cout<<"NO"<<endl; 155 } 156 157 return 0; 158 }
第六章部分例题
6-4自己先敲了一遍虽然可以完成书上的功能但是漏洞百出1#include<iostream>2#include<cstdio>3#include<cstring>45usingnamespacestd;67constintmaxn=100000+100;89chartxt[maxn];10intnext[maxn];1112intmain()13{1 查看详情
第六章部分例题
没看解答敲了一遍,发现自己题目的理解能力有点差 1#include<iostream>2#include<cstdio>34usingnamespacestd;56structNode7{8charvalue;9Node*ch1;10Node*ch2;11Node*ch3;12Node*ch4;1314Node():ch1(NULL),ch2(NULL 查看详情
第六章部分例题双向bfs邻接表和邻接矩阵实现
Idealpath双向bfs输出颜色,邻接矩阵实现 1#include<iostream>2#include<cstdio>3#include<cstring>4#include<queue>5#include<map>6#include<algorithm>78usingnamespacestd;910consti 查看详情
第六章例题
1#include<cstdio>2#include<cstring>34usingnamespacestd;56intbtr[1<<20];789intmain()10{11intD,I;1213while(scanf("%d%d",&D,&I)==2)14{15memset(btr,0,sizeof(btr));1617intk; 查看详情
第六章例题二叉树层次遍历
1.指针实现#include<iostream>#include<vector>#include<queue>#include<cstdio>#include<cstring>usingnamespacestd;#definemaxn100structNode{boolhave_value;intvalue;/*节点结构体*/ 查看详情
机试指南第六章-搜索-例题自解(代码片段)
枚举:枚举是最简单也是最直白的搜索方式,它依次尝试搜索空间中所有的解,测试其是否符合条件,若符合则输出答案,否则继续测试下一组解。例6.1百鸡问题#include<iostream>usingnamespacestd;intmain()intn;while(cin>>n)for(intx=0;x... 查看详情
算法入门经典第六章例题6-5移动盒子
例题6-5移动盒子(BoxesinaLine,UVa127675)问题给定一行盒子,从左到右编号依次为1,2,...,n.可以执行以下命令:1XY 把盒子X移动到Y的左边(如果已经在左边,忽略此命令)2XY 把盒子X移动到Y右边(如果X已经在Y的右边,忽... 查看详情
算法入门经典第六章例题6-15给任务排序
假设有n个变量,还有m个二元组(u,v),分别表示变量u小于v。那么,所有变量从小到大排列起来应该是什么样子呢?例如,有4个变量a,b,c,d,若已知a<b,c<b,d<c,则这4个变量的排序可能是a<d<c<b。尽管还有其他可能... 查看详情
第六章:循环结构
第六章:循环结构(二)一.for循环1.循环结构的四个组成部分 (1).初始部分:设置循环的初始状态,比如我们设置记录循环次数的变量i为0. (2).循环体:重复执行的代码. (3).迭代部分:下一... 查看详情
算法入门经典第六章例题6-14abbott的复仇(abbott'srevenge)bfs算法实现
SampleInput31N33 11WLNR* 12WLFNRER* 13NLER* 21SLWRNF* 22SLWFELF* 23SFREL* 0SampleOutput(3,1)(2,1)(1,1)(1,2)(2,2)(2,3)(1,3)(1,2)(1,1)(2,1) (2,2)(1,2)(1,3)( 查看详情
《算法》第六章部分程序part7(代码片段)
?书中第六章部分程序,加上自己补充的代码,包括全局最小切分Stoer-Wagner算法,最小权值二分图匹配●全局最小切分Stoer-Wagner算法1packagepackage01;23importedu.princeton.cs.algs4.In;4importedu.princeton.cs.algs4.StdOut;5importedu.princeton.cs.algs4.EdgeWei 查看详情
第六章
盒子模型1.盒子(box)模型内容(content)、填充(padding)、边框(border)、边界(margin)2.不同部分的说明Content(内容):盒子中的内容,显示文本或图片Padding(内边距):清除内容周围的区域,内边距的透明度Border(边框)... 查看详情
第六章习题
本来准备模仿前几题建树来做,但是发现判断部分还是要写出答案那样. 1#include<iostream>2#include<cstdio>345usingnamespacestd;67structNode8{9boolhave_value;10intw;11intd;1213Node*left,*right;1415Node():left(NULL),right( 查看详情
《学习之道》第六章习惯的部分-反应程序
如果你保护自己的反应程序,它最终也会反过来保护你。 我们大脑接到信号暗示时做出的常规性、习惯性的反应。 习惯可以是无害的或有益的,但在最坏的情况下,它可能会有很强的破坏性,它们会违抗常识。可以... 查看详情
java第六章
for循环语法:for(表达式1;表达式2;表达式3){ //循环体 } for的运算步骤为 1》2》4》3》1。。。 表达式1:赋值语句>循环结构的初始部分,为循环变量赋... 查看详情
第六章循环结构
一. for循环语法:for(表达式1;表达式2;表达式3){ //循环体 }表达式1:赋值语句>循环结构的初始部分,为循环变量赋初值,eg:inti=0表达式2:条件语句>循环结构... 查看详情
c和指针(pointersonc)——第六章:指针(上)
第六章指针这一章,就明显触痛刚開始学习的人敏感之处了。我也是在一段时间不用C以后就会对这一部分生疏,好吧,事实上是对高级指针那块生疏。当然这一部分总有非常多借鉴之处。比方数组范围的问题等,要不我也不会... 查看详情
第六章:个人主页和头像
...kMega-TutorialPartVI:ProfilePageandAvatars这是FlaskMega-Tutorial系列的第六部分,我将告诉你如何创建个人主页。本章将致力于为应用添加个人主页。个人主页用来展示用户的相关信息,其个人信息由本人录入。我将为你展示如何动态地生成... 查看详情