سورس بازی سودوکو با زبان ++C

cpp sudoku source code 7469 تصویر

سورس بازی سودوکو با زبان ++C

در این بخش سورس بازی سودوکو با زبان ++C را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. در ادامه می توانید توضیجات، بخشی از سورس کد، تصاویری از خروجی پروژه و فیلمی از نحوه اجرای برنامه را مشاهده کنید.

بازی سودوکو (sudoku)

سودوکو یکی از بازی های مشهور و پرطرفدار است که در اکثر کشورها بازی می کنند. محیط این بازی یک جدول ۹×۹ است که جدول های ۳×۳ را شامل می شود. در ابتدای بازی در خانه های مختلف اعدادی قرار داده می شود که باید با توجه به آن ها مقدار سایر خانه ها را نیز مشخص کنیم. در زیر می توانید قوانین مربوط به چگونگی پر کردن خانه های باقی ماننده را مشاهده کنید:

  • در هر سطر و ستون از جدول باید اعداد ۱ تا ۹ بدون تکرار قرار گیرند.
  • در هر ناحیه ۳×۳ از جدول باید اعداد ۱ تا ۹ بدون تکرار قرار گیرند.

روش حل

در گام اول در همه خانه های خالی جدول، عدد ها را از ۱ تا ۹ قرار می دهیم. سپس به سراغ اعدادی که به صورت پیشفرض تولید شده اند، می رویم و همه اعداد شبیه به آن که در عرض (بصورت افقی) قرار گرفته‌اند، را حذف کرده و یک خط افقی در بالای آن عدد می‌کشیم که مشخص باشد.

در این مرحله مانند مرحله اول عملیات را انجام می دهیم به جزء این که در همه خانه های عمودی در بالا یا پایین عدد مورد نظر اعداد شبیه به هم را حذف می کنیم و بعد با یک خط عمودی در کنار آن عدد، آن را مشخص می نماییم. اعداد مشابه عدد مورد نظر را در مربع نه خانه ای متناظر، حذف می کنیم و عدد را با یک دایره بر دور آن مشخص می کنیم.

دقت کنید که سه مرحله گذشته را در مورد همه عدد های از قبل نوشته شده تکرار کنید. کشیدن خط های عمودی افقی و دایره را بر آن عددها باعث می شود که اعدادی که باقی مانده اند مشخص شوند.

زمانی که کل عدد های چاپی با هر سه علامت مشخص شدند کار ما تا این مرحله تمام می شود. در این مرحله به دنبال خانه هایی می‌گردیم که فقط یک عدد در آنها باقییمانده و آن اعداد را پررنگ می کنیم. باید در هر ستون عددی را که فقط یکبار در آن ستون آمده است را پیدا کرده و این عدد قطعا جواب همان خانه خواهد بود و این عدد را هم پررنگ می کنیم. اکنون در هر مربع نه خانه ای عددی را که فقط یکبار در این نه خانه آمده است را یافته و به عنوان جواب یک جای می کنیم.

اگر روش فوق سخت است می توانید از این روش نیز استفاده کنید. توجه کنید که هر عدد در هر مربع یک بار استفاده می شود و جدول ما دارای ۹ تا از مجموعه خانه های مربع شکل ۳×۳ است به خاطر همین هر عدد علاوه بر اینکه در هر ردیف و هر ستون یک بار استفاده می شود در هر مربع نیز یک بار مورد استفاده قرار می گیرد.  پس اگر عددی در یک مربع بزرگ پیدا شد باید بررسی کنید و معادل آن عدد را در مربع بزرگتر را در همان ردیف و یا همان ستون پیدا کنید، اگر آن را پیدا کردید یک خط فرضی از آن عدد از هر مربع بصورت افقی و یا عمودی بکشید با این کار دو ستون و یا دو ردیف از مربعی که عدد در آن موجود نبوده از محاسبات حذف می شوند و فقط سه خانه از آن مربع باقی می ماند. همین کار را هم از طرف مقابل از همان عدد انجام دهید یک خانه خالی باقی خواهد ماند که جای همان عدد است. معمولاً با این کار بیشتر خانه های خالی پر می شوند که مابقی را از طریق اسکن کردن سطر به سطر و یا ستون به ستون می توان بدست آورد.

قسمت های از سورس کد

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream.h>
#define N 9
int PUZZLE[N][N];
int check(int a[]){
	//Checks an array for duplicate values. If there are duplicates, return 1, else return 0.
	int i, j;

	for(i=0;i<8;i++){
		for(j=i;j<8;j++){
			if(a[i] != 0){
				if(a[i] == a[j+1]){
					return 1; //Duplicate
				}
			}
		}
	}

	return 0; //No Duplicate
}
void printPuzzle(){
	//This program prints an input file in a Sudoku format. [NxN Grid]
	//Prints spaces (0) as x's for clarity.
	int row, col;
	for(row = 0; row < N; row++){
		for(col = 0; col < N; col++){
			if(PUZZLE[row][col] == 0){
				cout<<"x ";
			}else{
				cout<<PUZZLE[row][col]<<" ";
			}
		}
	cout<<endl;
	}
}
void readPuzzle()
{	//Reads input fule puzzle into global variable PUZZLE[N][N]
	int row, col, num;
   cout<<"Enter 9*9 Value In Matrix"<<endl;
	//Initializes board as 0's (empty spaces)
	for(row = 0; row < N; row++){
		for(col = 0; col < N; col++){
			cout<<"["<<row<<","<<col<<"]:";
			cin>>PUZZLE[row][col];
		}
	}
}
int main()
{ int givens; 	// the number of givens when asked to
		cout<<"givens:";
		cin>> givens;
		readPuzzle();
		verifyPuzzle();
		printPuzzle();
		generatePuzzle(givens);
		solvePuzzle();
		getch();
		return 0;
}

 

نوشته سورس بازی سودوکو با زبان ++C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *