このプログラムを実行すると、ランタイムエラーが発生しますこのプログラムでランタイムエラーを解決する方法
"ランタイムエラー:終了コードは-1073741819"です。
誰かがなぜエラーが発生し、それを修正するのか教えていただけますか?
プログラムは、ラダー(ターゲットワードに到達する最短チェーンの長さ)を見つけています。すなわち、辞書が与えられ、2つの単語「開始」および「目標」(両方とも同じ長さ)。チェーン内の隣接する単語が1文字だけ異なり、チェーン内の各単語が有効な単語、すなわち辞書内に存在するように、「開始」から「ターゲット」までの最小のチェーンの長さを見つける。 「ターゲット」という単語が辞書に存在し、すべての辞書の単語の長さが同じであると仮定することができる。
#include<bits/stdc++.h>
using namespace std;
string dic[] = {"POON", "PLEE", "SAME", "POIE", "PLEA", "PLIE", "POIN"};
int n = sizeof(dic)/sizeof(dic[0]);
set<string> graph;
struct word
{
string s;
int d;
};
bool isAdj(string &s , string &t)
{
int count = 0;
for(int i=0; i<s.length() && i<t.length(); i++)
if(s[i] != t[i])
count++;
return (count == 1);
}
int shortestPath(string s , string d)
{
queue<word> que;
word source = {s , 0};
que.push(source);
word cur;
//string t = "PLEA";
while(!que.empty())
{
cur = que.front();
if(cur.s == d)
break;
for(string t : graph)
{
if(isAdj(cur.s , t))
{
word temp = {t, cur.d + 1};
que.push(temp);
graph.erase(t);
}
}
que.pop();
}
if(cur.s == d)
return cur.d;
return 0;
}
main()
{
for(int i=0; i<n; i++)
graph.insert(dic[i]);
cout<<" "<<shortestPath("TOON" , "PLEA") ;
}
質問リンクは、ここで事前に http://www.geeksforgeeks.org/word-ladder-length-of-shortest-chain-to-reach-a-target-word/
のおかげです。
[列挙中に変更するコレクションに対してranged-forを使用しない](http://stackoverflow.com/questions/10360461/removing-item-from-vector-while-in-c11-range-for-ループ)。 – WhozCraig
しかし、私が(auto it = graph.begin(); it!= graph.end(); it ++)を使用しても、同じランタイムエラーが発生しています。 –
私は理由のためにその答えをリンクしました、そして、あなたは選択された答えを読むためにうまくいくでしょう。あなたがやっていることは*まだ*間違っています。私が投稿した質問の[選択された回答](http://stackoverflow.com/a/10360466/1322972)で、潜在的なコンテナ項目の消去とともにイテレータベースの列挙を実行する方法の*適切な例を詳しく見てください。 forループ構造にはインクリメントステートメントは存在しません。ループの* body *内に消去**または**のインクリメントがあります。より良いことに、それを「while」として再コードし、リンクされた振る舞いを模倣する。 – WhozCraig