Моя задача заключалась в том, чтобы определить, существует ли путь от источника до места назначения в данном графе (матрице смежности). Источник - 1, пункт назначения - 2, и путь может проходить только через номер 3 в матрице. Я использовал BFS для решения этой проблемы, но получаю двойную ошибку или ошибку повреждения. Если кто-нибудь может мне помочь, я все еще новичок в кодировании. Я прикрепил сюда код. Вопрос заключается в следующем. Дана матрица NXN (M), заполненная значениями 1, 0, 2, 3. Задача состоит в том, чтобы определить, возможен ли путь от источника до места назначения при обходе только пустых ячеек. Вы можете перемещаться вверх, вниз, вправо и влево.
Значение ячейки 1 означает Источник. Значение ячейки 2 означает пункт назначения. Значение ячейки 3 означает пустую ячейку. Значение ячейки 0 означает пустую стену. Примечание: есть только один источник и один пункт назначения. Первая строка ввода - это целое число T, обозначающее количество тестовых случаев. Затем следуют T-тестовые примеры. Каждый тестовый пример состоит из 2 строк. Первая строка каждого тестового примера содержит целое число N, обозначающее размер квадратной матрицы. Затем в следующей строке находится N * N значений матрицы, разделенных пробелами (M)
#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;
cout<<"hello";
q.push(source);
while(!q.empty())
{
pair <int, int> curr = q.front();
cout<<adj[curr.first][curr.second];
q.pop();
if(inside(curr.first,curr.second,r) && adj[curr.first][curr.second]==2)
{
return 1;
}
if(inside(curr.first,curr.second,r) && !visit[curr.first][curr.second] && adj[curr.first][curr.second]==1)
{
visit[curr.first][curr.second] = true;
}
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;
vector <vector <bool>> visit;
cin>>t;
int p=t;
vector <int> store(t);
pair <int,int> source;
pair <int,int> dest;
while(t--)
{
cin>>r;
adj = vector <vector <int>>(r, vector<int> (r));
visit = vector <vector <bool>>(r, vector<bool> (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++)
{
visit[i][j]=false;
}
}
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;
}