Код в C++:
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
void check(int i,int j);
int main()
{
int n;
cin >> n;
int a[n][n];
int b[n][n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
b[i][j] = 0;
}
}
b[0][0] = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; i++)
{
cin >> a[i][j];
}
}
check(0, 0);
if (b[n - 1][n - 1] == 1)
cout << "yesssss";
else
cout << "no!!!!";
}
void check(int i, int j)
{
if((i - 1) >= 0 &&
(i - 1) <= (n - 1) &&
(abs(a[i][j] - a[i - 1][j]) >= 10) &&
b[i - 1][j] == 0)
{
b[i - 1][j] = 1;
check(i - 1, j);
}
if((i + 1) >= 0 &&
(i + 1) <= (n-1) &&
(abs(a[i][j] - a[i + 1][j]) >= 10) &&
b[i + 1][j] == 0)
{
b[i + 1][j] = 1;
check(i + 1, j);
}
if((j + 1) >= 0 &&
(j + 1) <= (n - 1) &&
(abs(a[i][j] - a[i][j + 1]) >= 10) &&
b[i][j + 1] == 0)
{
b[i][j + 1] = 1;
check(i, j + 1);
}
if((j - 1) >= 0 &&
(j-1) <= (n - 1) &&
(abs(a[i][j] - a[i][j - 1]) >= 10) &&
b[i][j - 1] == 0)
{
b[i][j - 1] = 1;
check(i, j - 1);
}
}
Мой код имеет функцию с именем check
внутри которой целая переменная n
и массивы a
и b
. Я хочу, чтобы они были доступны для этой функции. Если я объявляю глобальную переменную, то я не могу использовать cin
вне main
функции.
Как я могу сделать эти переменные доступными для моей функции check
?
Поскольку вы не знаете размер массива перед его передачей в check
, вам нужно использовать указатель на указатель (а не 2D-массив). Здесь измененный код (у вас также была опечатка в вашем вложенном for-loop, где у вас должен был быть j
вместо i
):
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
void check(int i, int j, int** a, int** b, int n);
int main() {
int n;
cin >> n;
int** a;
int** b;
a = new int* [n];
b = new int* [n];
for (int i = 0; i < n; i++)
a[i] = new int[n];
for (int i = 0; i < n; i++)
b[i] = new int[n];
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++) {
b[i][j]=0;
}
}
b[0][0]=1;
for (int i=0;i<n;i++) {
for (int j=0;j<n;j++) {
cin >> a[i][j];
}
}
check(0,0,a,b,n);
if (b[n-1][n-1] == 1)
cout << "yesssss";
else
cout << "no!!!!";
}
void check(int i, int j, int** a, int** b, int n)
{
if((i-1)>=0 && (i-1)<=(n-1) && (abs(a[i][j]-a[i-1][j])>=10) && b[i-1][j]==0)
{
b[i-1][j]=1;
check(i-1,j,a,b,n);
}
if((i+1)>=0 && (i+1)<=(n-1) && (abs(a[i][j]-a[i+1][j])>=10) && b[i+1][j]==0)
{
b[i+1][j]=1;
check(i+1,j,a,b,n);
}
if((j+1)>=0 && (j+1)<=(n-1) && (abs(a[i][j]-a[i][j+1])>=10) && b[i][j+1]==0)
{
b[i][j+1]=1;
check(i,j+1,a,b,n);
}
if((j-1)>=0 && (j-1)<=(n-1) && (abs(a[i][j]-a[i][j-1])>=10) && b[i][j-1]==0)
{
b[i][j-1]=1;
check(i,j-1,a,b,n);
}
}