※ ChatGPTを利用し、要約された質問です(原文:C++の無限ループを解決してください)
C++の無限ループを解決する方法
このQ&Aのポイント
C++の無限ループを解決する方法について説明します。
質問者のアルゴリズムにおいて、unionを入力し、後ろにセミコロンを付けてwhile(cin>>p)をブレイクすると無限ループになる問題が発生しています。
最少の修正案として、while(cin>>p>>q)と書くことをおすすめします。
アルゴリズムを勉強するときに以下のソースを書きました;
void weighted_quick_union_algorithm() {
static const int volume = 10;
enum status {
terminate_,
union_,
find_
};
string str;
status sta;
vector<int> system(volume, 0);
vector<int> size(volume, 1);
for (int index = 0; index != volume; ++index) {
system[index] = index;
}
do {
cout<<"cin"<<endl;
cin >> str;
for (string::size_type index = 0; index != str.size(); ++index) str[index] = toupper(str[index]);
if (str == "UNION") sta = union_;
else if (str == "FIND") sta = find_;
else if (str == "TERMINATE") sta = terminate_;
switch (sta) {
case(0):
{
cout << str << endl;
break;
}
case(1):
{
cout << str << sta << endl;
int p(0), q(0), i(0), j(0);
while (cin >> p) {
cin >> q;
for (i = p; i != system[i]; i = system[i]);
for (j = q; j != system[j]; j = system[j]);
if (i == j) continue;
if (size[i] < size[j]) {
system[i] = j;
size[j] += size[i];
} else {
system[j] = i;
size[i] += size[j];
}
cout << p << " - " << q << endl;
}
cout<<"break"<<endl;
break;
}
case(2):
{
cout << str << sta << endl;
break;
}
}
} while (sta);
}
しかし unionを入力しあと ; でwhile(cin>>p)をブレイクしたら
cin
break
UNION1
cin
break
Union1
で無限ループ
結構時間かかったが間違いがわかりません
ちなみに最少は while(cin>>p>>q)と書いていましたが同じ結果です。
どうかお願いします
お礼
解決しました、素早いお返事ありがとうございました、助かりました!