前提・実現したいこと
AtCoderというサイトの Typical Contest001の問題A"深さ優先探索"に取り組んでいるのですが、エラーメッセージを見る限り、bool型配列のreachedとchar型配列のcのどちらか、もしくは両方に要素を入れられていないようです。
変数のスコープに関して致命的なミスがあるのでしょうか。
発生している問題・エラーメッセージ
terminate called after throwing an instance of 'std::out_of_range' what(): vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
該当のソースコード
C++
1#include <bits/stdc++.h> 2using namespace std; 3 4int x,y,h, w; 5 6vector<vector<bool>>reached(w,vector<bool>(h,false)); 7vector<vector<char>> c (w,vector<char>(h)); 8void search(int a, int b, int h, int w){ 9 if(a<0 || w<=a || b<0 || h<=b || c.at(a).at(b)=='#' ) return; 10 if(reached.at(a).at(b)) return; 11 12 reached.at(a).at(b)=true; 13 14 search(a+1,b,h,w); 15 search(a-1,b,h,w); 16 search(a,b+1,h,w); 17 search(a,b-1,h,w); 18} 19 20int main() { 21 int sx, sy; 22 int gx,gy; 23 cin >> h >> w; 24 25 for(int i=0;i<w;i++){ 26 for(int j=0;j<h;j++){ 27 cin >> c.at(i).at(j); 28 cout << c.at(i).at(j); 29 } 30 } 31 32 for(int i=0;i<w;i++){ 33 for(int j=0;j<h;j++){ 34 if(c.at(i).at(j)=='s'){ 35 sx=i; 36 sy=j; 37 } 38 } 39 } 40 41 search(sx,sy,h,w); 42 43 for(int i=0;i<w;i++){ 44 for(int j=0;j<h;j++){ 45 if(c.at(i).at(j)=='g'){ 46 gx=i; 47 gy=j; 48 } 49 } 50 } 51 52 if(reached.at(gx).at(gy)) cout <<"Yes"<<endl; 53 else cout<<"No"<<endl; 54}
試したこと
配列cの宣言の場所をint main()下に移動し、void search()部分とint main()下のsearch(sx,sy,h,w);からelse cout<<"No"<<endl;までをコメントアウトしたところ、配列cについて入出力のエラーは発生しませんでした。
原因は何でしょうか。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/07 00:43
2019/08/07 01:04 編集
2019/08/07 01:31
2019/08/07 02:39
2019/08/07 03:36