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


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

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

کد 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 استفاده کنید.