From a4da9f5a4648d718c5eeccf63ab93c4703e53618 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Sun, 30 Mar 2025 12:55:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D1=82=D0=BE=D1=87=D0=BA=D0=B8?= =?UTF-8?q?=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=B0=20=D0=B8=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D1=88=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel.cu | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/kernel.cu b/kernel.cu index a6ad41f..764b5b9 100644 --- a/kernel.cu +++ b/kernel.cu @@ -7,6 +7,11 @@ #define BLOCK_SIZE 16 #define MATRIX_SIZE 32 #define OBSTACLE_PROB 10 +#define START_X 2 +#define START_Y 2 +#define FINISH_X (MATRIX_SIZE - 3) +#define FINISH_Y (MATRIX_SIZE - 3) + #define INF UINT_MAX // Используем беззнаковый максимум __global__ void wave_step(int* P, unsigned int* dist, int n, bool* changed) { @@ -43,8 +48,8 @@ void generate_polygon(int* P, int n) { for (int i = 0; i < n*n; i++) { P[i] = (rand() % 100 < OBSTACLE_PROB) ? -1 : 0; } - P[0] = 0; // Гарантируем, что старт свободен - P[n*n - 1] = 0; // Гарантируем, что финиш свободен + P[START_X + START_Y * MATRIX_SIZE] = 0; // Гарантируем, что старт свободен + P[FINISH_X + FINISH_Y * MATRIX_SIZE] = 0; // Гарантируем, что финиш свободен } void print_distance_map(int* P, unsigned int* dist, int n) { @@ -53,9 +58,9 @@ void print_distance_map(int* P, unsigned int* dist, int n) { int idx = i * n + j; if (P[idx] == -1) printf("████"); // Препятствие - else if (i == 0 && j == 0) + else if (i == START_X && j == START_Y) printf("S "); // Старт - else if (i == n-1 && j == n-1) + else if (i == FINISH_X && j == FINISH_Y) printf("F "); // Финиш else if (dist[idx] == INF) printf(". "); // Недостижимая область @@ -85,7 +90,7 @@ int main() { // Инициализация расстояний unsigned int* dist = (unsigned int*)malloc(n*n*sizeof(unsigned int)); for (int i = 0; i < n*n; i++) dist[i] = INF; - dist[0] = 0; // Стартовая точка + dist[START_X + START_Y * MATRIX_SIZE] = 0; // Стартовая точка // Копирование данных на GPU cudaMemcpy(d_P, P, n*n*sizeof(int), cudaMemcpyHostToDevice); @@ -121,10 +126,10 @@ int main() { // Проверка результата cudaMemcpy(dist, d_dist, n*n*sizeof(unsigned int), cudaMemcpyDeviceToHost); - if (dist[n*n - 1] == INF) { + if (dist[FINISH_X + FINISH_Y * MATRIX_SIZE] == INF) { printf("Path not found!\n"); } else { - printf("Success! Path length: %u\n", dist[n*n - 1]); + printf("Success! Path length: %u\n", dist[FINISH_X + FINISH_Y * MATRIX_SIZE]); } printf("Time: %.2f ms\n", milliseconds);