原因不明の Segmentation Fault
最短経路に関する問題を解いたところ、Segmentation Faultが出たのですが、原因がわかりません。
解決方法を教えてください。
(よろしければ、どのようにしてSegmentation Faultの原因を見つけられるのかについてもご記載いただけると嬉しいです。)
<問題文>
大きさがN×Mの迷路が与えられます。迷路は通路と壁からできており、1ターンに隣接する上下左右4マスの通路へ移動することができます。スタートからゴールまで移動するのに必要な最小のターン数を求めなさい。(制約 N,M <= 100)
<入力例>
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
<出力例>
22
発生している問題・エラー
Segmentation fault
該当するソースコード
#include<bits/stdc++.h>
using namespace std;
int maze_cost(vector<vector<char>>,vector<vector<int>>,int,int);
int N,M;
int main(){
//入力部分
cin >> N >> M;
int start_x,start_y;
vector<vector<char>> maze(N, vector<char>(M));
for(int i = 0; i < N; i++){
for(int j = 0; j < M; j++){
cin >> maze.at(i).at(j);
if(maze.at(i).at(j) == 'S'){
start_x = j;
start_y = i;
}
}
}
//実行部分
vector<vector<int>> cost(N, vector<int>(M,100000));
cost.at(start_y).at(start_x) = 0;
int finally_cost = maze_cost(maze,cost,start_x,start_y);
//結果出力
cout << finally_cost << endl;
return 0;
}
int maze_cost( vector<vector<char>> neo_maze, vector<vector<int>> neo_cost, int now_x, int now_y){
if(neo_maze.at(now_y).at(now_x) == 'G'){
return neo_cost.at(now_y).at(now_x);
}
if(now_x + 1 < M){
if(neo_maze.at(now_y).at(now_x + 1) == '.'){
int young_cost = neo_cost.at(now_y).at(now_x) + 1;
if(neo_cost.at(now_y).at(now_x + 1) > young_cost){
neo_cost.at(now_y).at(now_x + 1) = young_cost;
}
maze_cost(neo_maze,neo_cost,now_x + 1, now_y);
}
}
if(now_y + 1 < N){
if(neo_maze.at(now_y + 1).at(now_x) == '.'){
int young_cost = neo_cost.at(now_y).at(now_x) + 1;
if(neo_cost.at(now_y + 1).at(now_x) > young_cost){
neo_cost.at(now_y + 1).at(now_x) = young_cost;
}
maze_cost(neo_maze,neo_cost,now_x, now_y + 1);
}
}
if(now_x - 1 >= 0){
if(neo_maze.at(now_y).at(now_x - 1) == '.'){
int young_cost = neo_cost.at(now_y).at(now_x) + 1;
if(neo_cost.at(now_y).at(now_x - 1) > young_cost){
neo_cost.at(now_y).at(now_x - 1) = young_cost;
}
maze_cost(neo_maze,neo_cost,now_x - 1, now_y);
}
}
if(now_y - 1 >= 0){
if(neo_maze.at(now_y - 1).at(now_x) == '.'){
int young_cost = neo_cost.at(now_y).at(now_x) + 1;
if(neo_cost.at(now_y - 1).at(now_x) > young_cost){
neo_cost.at(now_y - 1).at(now_x) = young_cost;
}
maze_cost(neo_maze,neo_cost,now_x, now_y - 1);
}
}
return 114514;
}
自分で試したこと
適当に問題がありそうな箇所にブレークポイントを置き、そのポイントよりも少し上の箇所で何らかを出力しようとしましたが、それでもSegmentation Faultとなり出力されませんでした。
0 likes