POJ 1386 Play on Words
来源:互联网 发布:中文编程语言 编辑:程序博客网 时间:2024/05/29 16:23
/*
欧拉路径
并查集判断连通性
建图:小写字母作为结点,对于单词hello,为h的出度增加1,为o的入度增加1
*/
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int caseNum, wordNum, letterNum;
char temp[1002];
struct letter
{
char type;
int rank, setId, inDeg, outDeg;
}letters[26];
int getIndex(char c)
{
for(int i = 0; i < letterNum; i++)
if(letters[i].type == c)
return i;
return -1;
}
void init()
{
int i;
letterNum = 0;
for(i = 0; i < 26; i++)
{
letters[i].rank = 0;
letters[i].setId = i;
letters[i].inDeg = letters[i].outDeg = 0;
}
}
int find(int id)
{
if(letters[id].setId == id) return id;
else return letters[id].setId = find(letters[id].setId);
}
void join(int id1, int id2)
{
int sid1 = find(id1), sid2 = find(id2);
if(sid1 == sid2) return;
if(letters[sid1].rank < letters[sid2].rank)
letters[sid1].setId = sid2;
else
{
letters[sid2].setId = sid1;
if(letters[sid1].rank == letters[sid2].rank)
letters[sid1].rank++;
}
}
int main()
{
int c, w, wordNum;
char head, tail;
scanf("%d", &caseNum);
for(c = 1; c <= caseNum; c++)
{
scanf("%d", &wordNum);
init();
for(w = 0; w < wordNum; w++)
{
scanf("%s", temp);
head = temp[0];
tail = temp[strlen(temp) - 1];
int indexH = getIndex(head);
if(indexH == -1)
{
letterNum++;
indexH = letterNum - 1;
letters[indexH].type = head;
}
int indexT = getIndex(tail);
if(indexT == -1)
{
letterNum++;
indexT = letterNum - 1;
letters[indexT].type = tail;
}
letters[indexH].outDeg++;
letters[indexT].inDeg++;
join(indexH, indexT);
}
bool can = true;
bool connect = true;
int setId0 = find(0);
for(w = 1; w < letterNum; w++)
{
if(find(w) != setId0)
{
connect = false;
break;
}
}
if(!connect) can = false;
if(can)
{
int oddNum = 0;
for(w = 0; w < 26; w++)
{
int sub = abs(letters[w].inDeg - letters[w].outDeg);
if(sub >= 2) {can = false; break;}
else if(sub == 1) oddNum++;
}
if(can)
{
if(!(oddNum == 0 || oddNum == 2))
can = false;
}
}
if(can) printf("Ordering is possible./n");
else printf("The door cannot be opened./n");
}
return 0;
}
- POJ 1386 Play on Words
- poj 1386 Play on Words
- poj 1386 Play on Words
- poj 1386 Play on Words
- poj 1386 Play on Words
- poj 1386 Play on Words
- POJ 1386 Play on Words
- POJ 1386 Play on Words
- POJ-1386-Play on Words
- POJ 1386 Play on Words
- poj 1386 Play on Words
- poj 1386 Play on Words
- POJ 1386 Play on Words
- poj Play on Words(1386)
- POJ-1386 Play on Words
- poj 1386 Play on Words
- POJ 1386 Play on Words
- POJ 1386 Play on Words
- 将字符串utf-8编码后再url编码
- mfc程序下调用console窗口
- 用Cookie时注意
- 传智播客 Oracle的系统权限与对象权限详解
- 对话框程序的键盘介面
- POJ 1386 Play on Words
- js实现图片切换
- 传智播客 JDBC基础之访问数据库的流程与示例
- r
- 传智播客 JDBC基础之工具类的封装与SQL注入问题
- 直方图均衡化算法 & 代码
- java记事本
- 硬盘安装Ubuntu9.04
- SQL分页查询