توی دبستان سیدالشهداء یزد مسابقهای برای حل سودوکو برگزار خواهد شد، جمعی از همکلاسیهای من نیز با داداششون یا ... که محصل این دبستان هستن همگروهی شدند و میخواهند توی این مسابقهی حل سودوکو شرکت کنند.
با توجه به اینکه تنبلی از ویژگیهای بارز هر فرد سمپادیست! دوستان من به من متوسل شدند که کد حل کنندهی سودوکو رو براشون بزنم! (با توجه به اینکه سودوکوهایی که باید حل میکردند کمی متفاوت با سودوکوی اصلی بود!)
در این سودوکو برخی از خانههای خالی رنگی شده اند، در خانههای رنگی حتما باید عددی زوج قرار بگیرد! این تنها تفاوت و دلیلی بود که دوستان من نتوانند از سرویسهای آنلاین حل سودوکو استفاده کنند.
کد 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 استفاده کنید.