سلام به همه دوستان و اساتید انجمن
من یک جدول 5*5 دارم که قراره یک سری مهره رو بکمک دراگ کردن توی این خونه ها قرار بدم و میخوام اگر مهره ها روی یک خط افقی یا عمودی یا مورب قرار گرفتند پیامی به کاربر نمایش داده بشه.پس اومدم یک آرایه دوبعدی 5*5 متناظر با اون جدولم ساختم و اگر مهره توی خانه ای قرار بگیره مقدار متناظر آرایه 1 و در غیر اونصورت صفر خواهد بود
[0,1,0,0,0]
[0,0,0,0,0]
[0,0,0,1,0]
[0,0,0,0,0]
[0,0,0,0,0]
مثلا در آرایه بالا دو تا 1 روی یک خط مورب قرار گرفته اند.(مثل حرکت فیل در شطرنج)
برای تشخیص تکراری بودن 1 ها روی ردیفهای افقی و عمودی خودم الگوریتمش رو نوشه ام ولی برای خطوط مورب هنوز به جایی نرسیدم.
میخواستم بدونم کسی ایده ای چیزی به ذهنش نمیرسه؟یا جایی ندیده؟ یا یک الگوریتم که یک آرایه رو بگیره و تکراری ها رو معرفی کنه.
ممنون
این برای خطوط مورب از بالا به پایین، چپ به راست ئه :
1) مقدار متغیر i (سطر) رو روی اندیس سطر اول تنظیم می کنیم.
2) مقدار متغیر j (ستون) رو روی اندیس
ستون اول تنظیم می کنیم.
3) مقدار متغیر c (تعداد 1 ها روی خط) را روی مقدار صفر تنظیم می کنیم.
4) مقدار متغیر k (پیشروی در خط مورب) رو روی مقدار صفر تنظیم می کنیم.
5) اگه در آرایه دو بعدی خونه i + k و
j + k (سطر i + k ستون
j + k) عدد 1 قرار داشت مقدار c رو یک واحد افزایش می دهیم.
6) اگر مقدار c بیشتر از 1 شد مشخصه که در اون خط مورب بیش از یک مورد 1 پیدا شده.
7) مقدار متغیر k (پیشروی در خط مورب) رو یک واحد افزایش می دهیم.
8) بررسی می کنیم که اگر هم مقدار i + k و هم مقدار
j + k از محدوده اندیس آرایه خارج نشده به مرحله 5 برگردیم.
9) اگر مقدار متغیر i (سطر) روی اندیس سطر اول قرار داشت ابتدا مقدار j (ستون) را یک واحد
افزایش می دهیم و
سپس اگر j (ستون) در محدوده اندیس های آرایه بود به مرحله 3 بر می گردیم.
10) مقدار متغیر i (سطر) را یک واحد افزایش می دهیم.
11) اگر مقدار متغیر i (سطر) در محدوده اندیس های آرایه بود به مرحله 2 بر می گردیم.
12) پایان
این برای خطوط مورب از بالا به پایین، راست به چپ ئه :
1) مقدار متغیر i (سطر) رو روی اندیس سطر اول تنظیم می کنیم.
2) مقدار متغیر j (ستون) رو روی اندیس
ستون آخر تنظیم می کنیم.
3) مقدار متغیر c (تعداد 1 ها روی خط) را روی مقدار صفر تنظیم می کنیم.
4) مقدار متغیر k (پیشروی در خط مورب) رو روی مقدار صفر تنظیم می کنیم.
5) اگه در آرایه دو بعدی خونه i + k و
j - k (سطر i + k ستون
j - k) عدد 1 قرار داشت مقدار c رو یک واحد افزایش می دهیم.
6) اگر مقدار c بیشتر از 1 شد مشخصه که در اون خط مورب بیش از یک مورد 1 پیدا شده.
7) مقدار متغیر k (پیشروی در خط مورب) رو یک واحد افزایش می دهیم.
8) بررسی می کنیم که اگر هم مقدار i + k و هم مقدار
j - k از محدوده اندیس آرایه خارج نشده به مرحله 5 برگردیم.
9) اگر مقدار متغیر i (سطر) روی اندیس سطر اول قرار داشت ابتدا مقدار j (ستون) را یک واحد
کاهش می دهیم و
سپس اگر j (ستون) در محدوده اندیس های آرایه بود به مرحله 3 بر می گردیم.
10) مقدار متغیر i (سطر) را یک واحد افزایش می دهیم.
11) اگر مقدار متغیر i (سطر) در محدوده اندیس های آرایه بود به مرحله 2 بر می گردیم.
12) پایان
Action Script که بلد نیستم، این در زبان های C++/C ئه :
کد:
for (int i = 0; i < 5; i++)
{
for (int j = 0; ((i == 0) && (j < 5)) || (j == 0); j++)
{
int c = 0;
for (int k = 0;((i + k) < 5) && ((j + k) < 5); k++)
{
if (a[i + k][j + k] == 1)
{
c++;
if (c > 1)
{
; Duplicate in line a[i][j], a[i + 1][j + 1], a[i + 2][j + 2], ...
break;
}
}
}
}
}
کد:
for (int i = 0; i < 5; i++)
{
for (int j = 4; ((i == 0) && (j >= 0)) || (j == 4); j--)
{
int c = 0;
for (int k = 0;((i + k) < 5) && ((j - k) >= 0); k++)
{
if (a[i + k][j - k] == 1)
{
c++;
if (c > 1)
{
; Duplicate in line a[i][j], a[i + 1][j - 1], a[i + 2][j - 2], ...
break;
}
}
}
}
}