PDA

View Full Version : سوال: الگوریتم نمایش جایگشت ها



amin.m1993
دوشنبه 17 مهر 1391, 21:44 عصر
سلام.
دوستان کسی هست که یه الگوریتم بازگشتی برای نمایش جایگشت های n عضوی یک مجموعه ی n عضوی بلد باشه؟
البته من سرچ کردم اما یه کد توی VB پیدا کردم اما چون VB بلد نیستم چیزی نفهمیدم اگه نتونستید بنویسید لطفا کد زیر رو به C#‎ تبدیل کنید.
ممنون
Private Sub Command1_Click()
Dim N As Long, A() As Long, I As Long
N = Val(Text1.Text)
ReDim A(1 To N)
For I = 1 To N
A(I) = I
Next
List1.Clear
MySub A, 1, N
End Sub

Private Sub MySub(ByRef List() As Long, ByVal Index As Long, ByVal Count As Long)
Dim Pos As Long, Temp As Long
If Index > Count Then
ShowList List, Count
Exit Sub
End If
MySub List, Index + 1, Count
For Pos = Index + 1 To Count
Temp = List(Pos)
List(Pos) = List(Index)
List(Index) = Temp
MySub List, Index + 1, Count
List(Index) = List(Pos)
List(Pos) = Temp
Next
End Sub

Private Sub ShowList(ByRef List() As Long, ByVal Count As Long)
Dim Index As Long, Str As String, Num As String
For Index = 1 To Count
Str = Str & Chr(64 + List(Index)) & " "
Next
Num = CStr(List1.ListCount + 1)
Num = Space(4 - Len(Num)) & Num
List1.AddItem Num & ") " & Str
End Sub

مسعود اقدسی فام
سه شنبه 18 مهر 1391, 17:45 عصر
این کد چندان ناواضح نیست. شما فقط با تابع MySub کار دارید که یه لیست رو می‌گیره (همون اعداد یک تا n هستش)، و دو تا پارامتر دیگه. اولین بار هم به صورت (MySub(A, 1, N فراخوانی شده که A لیست همون اعداد یک تا N هستش.




private void MySub(long[] list, long Index, long Count)
{
long Pos, Temp;
if (Index > Count)
{
Showlist(list, Count); // End
return;
}
MySub(list, Index + 1, Count);
for(Pos = Index + 1 ; Pos <= Count ; Pos++)
{
Temp = list[Pos];
list[Pos] = list[Index];
list[Index] = Temp;
MySub(list, Index + 1, Count);
list[Index] = list[Pos];
list[Pos] = Temp;
}
{




تفسیر الگوریتم با خودتون.