//这一题用暴力求解可以过,但是当数据比较大的时候,就肯定会超时,所以就用到了字典树,这也是我第一次接触字典树,花了几小时
//看懂了字典树的原理之后,再看懂别人的代码,自己打出来,无办法,第一次接触,还需要多多的练习!
/*#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> v;
int main()
{
int tc = 0;
string str;
while (cin >> str){
bool flag = true, flag1 = true;
int size, i, j, m, n;
v.clear();
tc++;
v.push_back(str);
while (cin >> str){
if (str == "9") break;
v.push_back(str);
}
size = v.size();
for (i = 0; i < size; i++){
if (!flag) break;
for (j = i+1; j < size; j++){
flag1 = true;
if (v[i].length() >= v[j].length()){
for (m = 0; m < v[j].length(); m++){
if (v[i][m] != v[j][m]){
flag1 = false;
break;
}
}
if (flag1){
flag = false;
break;
}
}
else{
for (m = 0; m < v[i].length(); m++){
if (v[i][m] != v[j][m]){
flag1 = false;
break;
}
}
if (flag1){
flag = false;
break;
}
}
}
}
if (flag)
cout << "Set " << tc << " is immediately decodable" << endl;
else
cout << "Set " << tc << " is not immediately decodable" << endl;
}
system("pause");
}
*/
#include <iostream>
#include <string>
using namespace std;
struct TireNode
{
int count;
struct TireNode *branch[2];
TireNode()
{
count = 0;
for (int i = 0; i < 2; i++)
branch[i] = NULL;
}
};
//字典树的构建
void InsertTire(TireNode *&root, string str)
{
if (root == NULL)
root = new TireNode();
int i, len;
len = str.length();
TireNode *p = root;
for (i = 0; i < len; i++){
if (!p->branch[str[i]-'0'])
p->branch[str[i]-'0'] = new TireNode();
p = p->branch[str[i]-'0'];
p->count++;
}
}
//字典树的查询
bool SearchTire(TireNode *root, string str)
{
if (root == NULL)
return false;
int i, len;
len = str.length();
TireNode *p = root;
for (i = 0; i < len; i++){
p = p->branch[str[i]-'0'];
if (p->count == 1)
return true;
}
return false;
}
int main()
{
int i, k = 0, tc = 1;
string str, word[1000];
TireNode *root = NULL;
bool flag;
while (cin >> str){
if (str == "9"){
flag = false;
for (i = 0; i < k; i++){
if (!SearchTire(root, word[i])){
flag = true;
break;
}
}
if (!flag)
cout << "Set " << tc << " is immediately decodable" << endl;
else
cout << "Set " << tc << " is not immediately decodable" << endl;
root = NULL;
tc++;
k = 0;
}
else{
word[k] = str;
InsertTire(root, word[k]);
k++;
}
}
system("pause");
}
poj 1056 IMMEDIATE DECODABILITY
最新推荐文章于 2019-10-03 16:00:45 发布