はじめまして,今回が本サイトでの初めての質問になります.
最近競技プログラミングを始めるためにC++を勉強しているのですが,言語仕様が分からない故のバグに日々悩まされています.
AtcoderTypicalContest001 A問題「深さ優先探索」のためのソースコード(下記)についてなのですが,
'#'
を塀,'.'
を道としてスタート地点('s'
)からゴール地点('g'
)までたどり着くことが出来るかどうかを判定する問題です.
以下のソースコード及びテストパターンにおいて,何らかのメッセージも無しに強制終了してしまいます.
最終的に"Yes"
もしくは"No"
を返すはずだと思うのですが出力が出てくれません.
強制終了の原因もしくは解決策があれば教えて頂きたいです.
OSはwindows,開発環境はvisual studio codeを使用しています.
###ソースコード
C++
1#include <bits/stdc++.h> 2 3#define rep(i, n) for(int i = 0; i < (int)(n); i++) 4#define repr(i, n) for(int i = (int)(n); i >= 0; i--) 5#define repm(i, m, n) for(int i = (int)(m); i < (int)(n); i++) 6#define repmr(i, m, n) for(int i = (int)(n); i >= (int)(m); i--) 7#define all(x) (x).begin(),(x).end() 8#define inf 2e9 9 10using namespace std; 11typedef long long int lli; 12typedef long long ll; 13 14int main() { 15 int h,w; 16 cin >> h >> w; 17 vector<vector<char>> c(h, vector<char>(w)); 18 vector<int> start(2); 19 rep(i,h) rep(j,w){ 20 cin >> c[i][j]; 21 if(c[i][j] == 's'){ 22 start[0] = i; 23 start[1] = j; 24 } 25 } 26 27 vector<vector<bool>> rout(h, vector<bool>(w, false)); 28 stack<vector<int>> st; 29 st.push(start); 30 bool goal = false; 31 while(st.size() != 0){ 32 vector<int> now = st.top(); 33 if(c[now[0]][now[1]] == 'g'){ 34 goal = true; 35 break; 36 } 37 st.pop(); 38 rout[now[0]][now[1]] = true; 39 if(now[0]-1 >= 0 && c[now[0]-1][now[1]] != '#' && !rout[now[0]-1][now[1]]){ 40 st.push({now[0]-1, now[1]}); 41 cout << st.top()[0] << " " << st.top()[1] << endl; 42 } 43 if(now[0]+1 < h && c[now[0]+1][now[1]] != '#' && !rout[now[0]+1][now[1]]){ 44 st.push({now[0]+1, now[1]}); 45 cout << st.top()[0] << " " << st.top()[1] << endl; 46 } 47 if(now[1]-1 >= 0 && c[now[0]][now[1]-1] != '#' && !rout[now[0]][now[1]-1]){ 48 st.push({now[0], now[1]-1}); 49 cout << st.top()[0] << " " << st.top()[1] << endl; 50 } 51 if(now[1]+1 < w && c[now[0]][now[1]+1] != '#' && !rout[now[0]-1][now[1]+1]){ 52 st.push({now[0], now[1]+1}); 53 cout << st.top()[0] << " " << st.top()[1] << endl; 54 } 55 } 56 57 cout << ((goal) ? "Yes":"No") << endl; 58 59}
入力内容
4 4 ...s .... .... .g..
出力内容
stackにpushする内容を毎回出力しています.
1 3 0 2 1 2 0 1
ここで出力が途切れ,何のメッセージもなく強制終了します.
回答2件
あなたの回答
tips
プレビュー