53 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Backtracking Algorithms
							 | 
						|||
| 
								 | 
							
								localeTitle: خوارزميات التراجع
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# خوارزميات التراجع
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								التراجع هو خوارزمية عامة لإيجاد كل الحلول (أو بعض) لبعض المشاكل الحسابية ، ولا سيما مشاكل الرضا المقيدة ، التي تبني بشكل متزايد المرشحين للحلول ، وتتخلى عن كل مرشح جزئي _("backtracks")_ بمجرد أن يحدد أن المرشح لا يستطيع من المحتمل أن تكتمل إلى حل صالح.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### مثال على المشكلة (مشكلة جولة فارس)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								_يتم وضع الفارس على أول كتلة من لوحة فارغة ، ويتحرك وفقا لقواعد لعبة الشطرنج ، يجب زيارة كل مربع مرة واحدة بالضبط._
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								\# # # # # اتبعها فارس لتغطية جميع الخلايا فيما يلي هو رقعة الشطرنج مع 8 × 8 خلايا. تشير الأرقام في الخلايا إلى تحريك عدد Knight. [](https://commons.wikimedia.org/wiki/File:Knights_tour_(Euler).png)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### خوارزمية السذاجة لجولة نايت
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								تقوم Naive Algorithm بتوليد جميع الجولات واحدة تلو الأخرى والتحقق مما إذا كانت الجولة التي تم إنشاؤها تفي بالقيود.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								 `while there are untried tours 
							 | 
						|||
| 
								 | 
							
								 { 
							 | 
						|||
| 
								 | 
							
								   generate the next tour 
							 | 
						|||
| 
								 | 
							
								   if this tour covers all squares 
							 | 
						|||
| 
								 | 
							
								   { 
							 | 
						|||
| 
								 | 
							
								      print this path; 
							 | 
						|||
| 
								 | 
							
								   } 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								` 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### خوارزمية التراجع عن جولة نايت
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								فيما يلي خوارزمية Backtracking لمشكلة جولة Knight.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								 `If all squares are visited 
							 | 
						|||
| 
								 | 
							
								    print the solution 
							 | 
						|||
| 
								 | 
							
								 Else 
							 | 
						|||
| 
								 | 
							
								   a) Add one of the next moves to solution vector and recursively 
							 | 
						|||
| 
								 | 
							
								   check if this move leads to a solution. (A Knight can make maximum 
							 | 
						|||
| 
								 | 
							
								   eight moves. We choose one of the 8 moves in this step). 
							 | 
						|||
| 
								 | 
							
								   b) If the move chosen in the above step doesn't lead to a solution 
							 | 
						|||
| 
								 | 
							
								   then remove this move from the solution vector and try other 
							 | 
						|||
| 
								 | 
							
								   alternative moves. 
							 | 
						|||
| 
								 | 
							
								   c) If none of the alternatives work then return false (Returning false 
							 | 
						|||
| 
								 | 
							
								   will remove the previously added item in recursion and if false is 
							 | 
						|||
| 
								 | 
							
								   returned by the initial call of recursion then "no solution exists" ) 
							 | 
						|||
| 
								 | 
							
								` 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### معلومات اكثر
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								[ويكيبيديا](https://en.wikipedia.org/wiki/Backtracking)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								[المهوسون 4 المهوسون](http://www.geeksforgeeks.org/backtracking-set-1-the-knights-tour-problem/)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								[مقدمة مثيرة جدا للرجوع](https://www.hackerearth.com/practice/basic-programming/recursion/recursion-and-backtracking/tutorial/)
							 |