سلام
امیدوارم این کد بتونه براتون مفید باشه
#include <iostream>
#include <conio.h>
#define ROW 9
#define COLUMN 9
using namespace std;
int n_cmpl(int &); //تعیین تعداد چرخش کامل حول درونی ترین خانه ماتریس
void print_a1( int, int, int [][COLUMN]); //دسترسی به خانه های اطراف درونی ترین خانه(وقتی که به چرخش کامل نیاز است)
void print_a2( int, int, int, int[][COLUMN]); //دسترسی به خانه های اطراف درونی ترین خانه(زمانی که به چرخش کامل نیاز نیست)
int _tmain(int argc, _TCHAR* argv[])
{
int a[ROW][COLUMN] =
{
{ 69, 70, 71, 72, 73, 74, 75, 76, 77},
{ 68, 40, 41, 42, 43, 44, 45, 46, 78},
{ 67, 39, 19, 20, 21, 22, 23, 47, 79},
{ 66, 38, 18, 6, 7, 8, 24, 48, 80},
{ 65, 37, 17, 5, 0, 1, 9, 25, 49},
{ 64, 36, 16, 4, 3, 2, 10, 26, 50},
{ 63, 35, 15, 14, 13, 12, 11, 27, 51},
{ 62, 34, 33, 32, 31, 30, 29, 28, 52},
{ 61, 60, 59, 58, 57, 56, 55, 54, 53}
};
int andis = (int)ROW / 2; //محاسبه اندیس درونی ترین خانه ماتریس
int number; //ذخیره تعداد همسایه ها برای جست و جو
cout << "Please enter your number: ";
cin >> number; //خواندن تعداد همسایه ها
int __cmpl = n_cmpl(number); //ذخیره تعداد چرخش های کامل حول درونی ترین خانه ماتریس
int __half = number; //تعداد خانه هایی که باید جست و جو گردد اما به یک چرخش کامل نمیرسد
if(__cmpl > 0)
{
for(int i = 1; i <= __cmpl; ++i) //فراخوانی و ارسال اعداد به تفکیک، به تابع دسترسی به حول درونی ترین خانه اول 1 بعد 2 و ...
{
print_a1(andis, i, a); //i = 1 print ===> 1 2 3 4 5 6 7 8 i = 2 print ===> 9 10 11 12 ... 24
}
}
if(__half > 0)
{
print_a2(andis, __cmpl + 1, __half, a);
}
getch();
return 0;
}
//***********************************************
//***********************************************
int n_cmpl(int &n)
{
int x = 1 //تعیین تعداد خانه های هر دور 8 * 1 => 8 , 8 * 2 => 16 , 8 * 3 => 24 x => 1, 2, 3, ...
, ncmpl = 0; //ذخیره تعداد دورهای کامل
while(n >= x * 8)
{
n = (n) - (x * 8); //تعداد خانه های هر چرخش کامل از تعداد همسایه هایی که باید گردش
++ncmpl; //پیدا کند کم میشود، n = 24, x = 1 ==>> 24 - 1 * 8 => n = 16, ncmpl = 1(یک دور کامل)
++x; //n = 16, x = 2 ==> 16 - 2 * 8 => n = 0, ncmpl = 2(دو دور کامل)
}
return ncmpl;
}
//***********************************************
//***********************************************
void print_a1(int ads, int dk, int a[][COLUMN])
{
int cmpl, row, column, counter = 0;
cmpl = dk; //dk ==> i نماد هر چرخش کامل
row = ads; //ads ==> andis اندیس درونی ترین خانه ارایه
column = ads;
column += cmpl;
/*------------------------------------------*/ //چاپ همسایه ی نیمه سمت راست خانه مورد نظر
counter = 0;
while(counter <= cmpl)
{
cout << a[row + counter][column] << " ";
++counter;
}
/*------------------------------------------*/ //چاپ همسایه های سمت پایین خانه مورد نظر
counter = 1;
row += cmpl;
while(counter <= cmpl * 2)
{
cout << a[row][column - counter] << " ";
++counter;
}
/*------------------------------------------*/ //چاپ همسایه ها ی سمت چپ خانه مورد نظر
counter = 1;
column -= cmpl * 2;
while(counter <= cmpl * 2)
{
cout << a[row - counter][column] << " ";
++counter;
}
/*-----------------------------------------*/ //چاپ همسایه های بالای خانه مورد نظر
counter = 1;
row -= cmpl * 2;
while(counter <= cmpl * 2)
{
cout << a[row][column + counter] << " "; //افزایش اندیس ستون در اینجا لحاظ نگردیده بود که در شرط پایین در قسمت "ویرایش" لحاظ گردیده است
++counter;
}
/*-----------------------------------------*/ //چاپ نیمی از همسایه های راست خانه مورد نظر
if(cmpl - 1 != 0)
{
counter = 1;
column += cmpl * 2; //ویرایش
while(counter <= (cmpl - 1))
{
cout << a[row + counter][column] << " ";
++counter;
}
}
return ;
}
//*******************************************
//*******************************************
void print_a2(int ads, int dk, int dn, int a[][COLUMN])
{
int cmpl, row, column, counter = 0;
cmpl = dk; //ds ==> i نماد هر چرخش کامل
row = ads; //ads ==> andis اندیس درونی ترین خانه آرایه
column = ads;
column += cmpl;
/*------------------------------------------*/ //چاپ همسایه ی نیمه سمت راست خانه مورد نظر
counter = 0;
while(counter <= cmpl)
{
cout << a[row + counter][column] << " ";
++counter;
--dn;
if(dn == 0)
break;
}
/*------------------------------------------*/ //چاپ همسایه های سمت پایین خانه مورد نظر
if(dn > 0)
{
counter = 1;
row += cmpl;
while(counter <= cmpl * 2)
{
cout << a[row][column - counter] << " ";
++counter;
--dn;
if(dn == 0)
break;
}
}
/*------------------------------------------*/ //چاپ همسایه ها ی سمت چپ خانه مورد نظر
if(dn > 0)
{
counter = 1;
column -= cmpl * 2;
while(counter <= cmpl * 2)
{
cout << a[row - counter][column] << " ";
++counter;
--dn;
if(dn == 0)
break;
}
}
/*-----------------------------------------*/ //چاپ همسایه های بالای خانه مورد نظر
if(dn > 0)
{
counter = 1;
row -= cmpl * 2;
while(counter <= cmpl * 2)
{
cout << a[row][column + counter] << " ";
++counter;
--dn;
if(dn == 0)
break;
}
}
/*-----------------------------------------*/ //چاپ همسایه های نیمه راست خانه مورد نظر
if(dn > 0)
{
if(cmpl - 1 > 0)
{
counter = 1;
column += cmpl * 2;
while(counter <= (cmpl - 1))
{
cout << a[row + counter][column] << " ";
++counter;
--dn;
if(dn == 0)
break;
}
}
}
return ;
}