Tugas saya adalah menemukan apakah ada jalur dari sumber ke tujuan dalam grafik tertentu (matriks ketetanggaan). Sumbernya 1 dan tujuannya 2 dan jalur hanya dapat melalui nomor 3 dalam matriks. Saya telah menggunakan BFS untuk mengatasi masalah ini tetapi saya mendapatkan kesalahan SIGABRT. Kalau ada yang bisa tolong bantu saya, saya masih pemula dalam coding. Saya telah melampirkan kode di sini. Pertanyaannya adalah sebagai berikut Diberikan matriks N X N (M) yang diisi dengan 1, 0, 2, 3. Tugasnya adalah menemukan apakah ada kemungkinan jalur dari sumber ke tujuan sambil melintasi sel kosong saja. Anda dapat melintasi ke atas, bawah, kanan, dan kiri.
Nilai sel 1 berarti Sumber. Nilai sel 2 berarti Tujuan. Nilai sel 3 berarti sel kosong. Nilai sel 0 berarti Dinding Kosong. Catatan: hanya ada satu sumber dan satu tujuan. Baris input pertama adalah bilangan bulat T yang menunjukkan jumlah kasus uji. Kemudian kasus uji T menyusul. Setiap test case terdiri dari 2 baris. Baris pertama dari setiap kasus uji berisi bilangan bulat N yang menunjukkan ukuran matriks persegi. Kemudian pada baris berikutnya adalah N*N nilai matriks (M) yang dipisahkan spasi.
#include <stdio.h>
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <queue>
#include <utility>
using namespace std;
bool inside(int first, int second,int r)
{
if(first<r && second<r && first>=0 && second>=0)
{
return true;
}
return false;
}
int isPath(pair <int, int> source, pair <int,int> dest, vector <vector<int>> &adj, vector <vector <bool>> &visit, int r)
{
queue <pair<int,int>> q;
q.push(source);
while(!q.empty())
{
pair <int, int> curr = q.front();
q.pop();
if(inside(curr.first,curr.second,r) && !visit[curr.first][curr.second] && adj[curr.first][curr.second]==2)
{
return 1;
}
if(inside(curr.first+1,curr.second,r) && (adj[curr.first+1][curr.second]==3||adj[curr.first+1][curr.second]==2) && !visit[curr.first+1][curr.second])
{
curr.first++;
q.push(curr);
visit[curr.first][curr.second]=true;
curr.first--;
}
if(inside(curr.first-1,curr.second,r) && (adj[curr.first-1][curr.second]==3||adj[curr.first-1][curr.second]==2) && !visit[curr.first-1][curr.second])
{
curr.first--;
q.push(curr);
visit[curr.first][curr.second]=true;
curr.first++;
}
if(inside(curr.first,curr.second+1,r) && (adj[curr.first][curr.second+1]==3||adj[curr.first][curr.second+1]==2) && !visit[curr.first][curr.second+1])
{
curr.second++;
q.push(curr);
visit[curr.first][curr.second]=true;
curr.second--;
}
if(inside(curr.first,curr.second-1,r) && (adj[curr.first][curr.second-1]==3||adj[curr.first][curr.second-1]==2) && !visit[curr.first][curr.second-1])
{
curr.second--;
q.push(curr);
visit[curr.first][curr.second]=true;
curr.second++;
}
}
return 0;
}
int main() {
int r,c,t,i,j;
vector <vector <int>> adj(r, vector <int>(c));
vector <vector <bool>> visit(r, vector <bool>(c));
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
visit[i][j]=false;
}
}
cin>>t;
int p=t;
vector <int> store(t);
pair <int,int> source;
pair <int,int> dest;
while(t--)
{
cin>>r;
for(i=0;i<r;i++)
{
for(j=0;j<r;j++)
{
cin>>adj[i][j];
}
}
for(i=0;i<r;i++)
{
for(j=0;j<r;j++)
{
if(adj[i][j]==1)
{
source.first=i;
source.second=j;
}
if(adj[i][j]==2)
{
dest.first=i;
dest.second=j;
}
}
}
int k=0, max=0;
store[t-1]=isPath(source, dest, adj, visit,r);
}
for(i=0;i<p;i++)
{
cout<<store[i];
}
return 0;
}