۳ مطلب در بهمن ۱۳۹۴ ثبت شده است

سودوکو حل کنید!

توی دبستان سیدالشهداء یزد مسابقه‌ای برای حل سودوکو برگزار خواهد شد، جمعی از هم‌کلاسی‌های من نیز با داداششون یا ... که محصل این دبستان هستن همگروهی شدند و می‌خواهند توی این مسابقه‌ی حل سودوکو شرکت کنند.


با توجه به اینکه تنبلی از ویژگی‌های بارز هر فرد سمپادیست! دوستان من به من متوسل شدند که کد حل کننده‌ی سودوکو رو براشون بزنم! (با توجه به اینکه سودوکو‌هایی که باید حل می‌کردند کمی متفاوت با سودوکوی اصلی بود!)

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

کد C++: 

// In the name of GOD
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;



//ifstream fin("p096_sudoku.txt");

char ma[9][9], mo[9][9];
long long int sum = 0;

bool solve(vector<vector<char> > &x, int i, int j) {
	if(i >= 9 || j >= 9) {
		return true;
	}
	int nextI, nextJ;
	if(j < 8) {
		nextJ = j+1;
		nextI = i;
	} else {
		nextI = i+1;
		nextJ = 0;
	}
	if(x[i][j] != '0' && x[i][j] != '+') {
		return solve(x, nextI, nextJ);
	}

	char st = '1', old = x[i][j];int add = 1;
	if(x[i][j] == '+') {st = '2';add = 2;}

	for(char y = st; y <= '9'; y+=add) {
		bool ok = true;
		x[i][j] = old;
		for(int k = 0; k < 9; k++) {
			if(x[i][k] == y || x[k][j] == y) {
				ok = false;
				break;
			}
		}
		for(int k = int(i/3)*3; k < int(i/3)*3 + 3; k++) {
			for(int l = int(j/3)*3; l < int(j/3)*3 + 3; l++) {
				if(x[k][l] == y) {
					ok = false;
				}
	//			cout<<x[k][l];
			}
			//cout<<'\n';
		}
		//return 0;
		if(ok) {
			x[i][j] = y;
			if(solve(x, nextI, nextJ)) {
				ma[i][j] = y;
				return true;
			}
			x[i][j] = old;
		}
	}
	//cout<<"NAA\n";
	return false;
}

int hal() {
	vector<vector<char> > x;
	char y;
	x.resize(9);
	vector<vector<vector<char> > > a,b, minB;
	int c = 0;
	for(int i = 0; i < 9; i++) {
		for(int j = 0; j < 9; j++) {
			cin>>y;
			x[i].push_back(y);
			//c += x[i][j] == '0';
			ma[i][j] = x[i][j];
			//cout<<x[i][j];
		}
		//cout<<'\n';
	}

	a.push_back(x);
	if(!solve(x, 0, 0)) {
		cout<<"NAAAAAAAAAAA\n";
	}
	for(int i = 0; i < 9; i++) {
		for(int j = 0; j < 9; j++) {
			cout<<ma[i][j];
		}
		cout<<'\n';
	}
}

int main() {
	//string s;
	//for(int i = 0; i < 50; i++) {
//		cin>>s>>s;
		hal();
		//break;

	//}
	//cout<<sum;
}
چگونه از کد استفاده کنم؟
خوب سوال خوبیست! نقشه‌ی سودوکو رو به عنوان ورودی به برنامه بدهید، خانه‌هایی که شرطی ندارند و خالی هستند را ۰ داده و خانه‌های خالی ای که باید زوج باشند را + دهید مثلا:
0030+200+
020000000
0050780+1
000051200
00000091+
00030++75
600010730
001007009
070890000

چگونه کد را اجرا کنیم؟

می‌تونید از سایت http://ideone.com استفاده کنید.

۲ نظر موافقین ۱ مخالفین ۰
AliReza_Tofighi

پیست‌کردن نوشته

چندی پیش، سرویس paste.white-crow.ir رو نوشته‌بودم که خداروشکر ازش استفاده میشه و مفید واقع شده...

دیشب تصمیم به نوشتن سیستم پیست‌کردن نوشته نیز گرفتم و نوشتمش!

http://posts.atofighi.ir/

چون نوشته مقدار زیادی با کد فرق دارد، نمی‌توانم به عموم دسترسی استفاده از این سرویس رو بدم، استفاده از سرویس جدید نیاز به داشتن یک رمز عبور داره که هرکی خواست رمزشو از طریق نظرات درخواست بده، براش ایمیل می‌کنم.

۰ نظر موافقین ۱ مخالفین ۰
AliReza_Tofighi

مسابقه شهر ریاضی

خوب، پنج‌شنبه یه مسابقه برگزار شد توی یزد به نام شهر ریاضی...

من و دوتا از دوستانم، محمد مهدی شجاعی‌فر و امیرمحمد صفری، هم توی این مسابقه شرکت کردیم و توی مرحله‌ی استان یزد در جمع پسران اول شدیم xD

دعامون کنید مسابقه‌ی فینال رتبه بیاریم! xD

۰ نظر موافقین ۱ مخالفین ۰
AliReza_Tofighi