2012第三屆藍橋杯C本科決賽 第五題 “數獨”遊戲

來源:互聯網
上載者:User
#include <stdio.h>int all; // 解答計數// 儲存組別和已設定字元struct Mar{char group;char set;}mar[6][6];// 將組和行列分離判斷struct Group{int count; // 記錄指標char set[6]; // 組內字元}grp[6];// 行列是否重複int lc(int m, int n, char c){ int i;for(i=0; i<6; i++){if(mar[m][i].set==c)return 0;}for(i=0; i<6; i++){if(mar[i][n].set==c)return 0;}return 1;}// 處理grp數組,判斷組內是否重複int gp(char gr, char c){int i;for(i=0; i<grp[gr-'0'].count; i++){if(c==grp[gr-'0'].set[i])return 0;}return 1;}// 列印void print(){printf("%d\n", ++all);int i, j;for(i=0; i<6; i++){for(j=0; j<6; j++) printf("%c ", mar[i][j].set);printf("\n");}}// 回溯函數,試探賦值void set(int m, int n){// 滿足輸出if(m>5){print();return;}int i;// 區分固定已設定字元和可變動字元if(mar[m][n].set=='0'){for(i=0; i<6; i++){if(lc(m, n, i+'A') && gp(mar[m][n].group, i+'A')){ // 判斷mar[m][n].set=i+'A'; // 試探grp[mar[m][n].group-'0'].set[grp[mar[m][n].group-'0'].count++]=mar[m][n].set; // 對應組增加一個字元set(m+(n+1)/6, (n+1)%6);//mar[m][n].set='0'; //函數退出時必須還願狀態,由於不參與條件判斷,常放於函數後面grp[mar[m][n].group-'0'].set[--(grp[mar[m][n].group-'0'].count)]='0'; // 注意組設定字元時會影響下次試探的判斷所以必須還原}}mar[m][n].set='0';}else set(m+(n+1)/6, (n+1)%6);}int main(){int i, j, n, t;char c;for(i=0; i<6; i++){for(j=0; j<6; j++){mar[i][j].group=getchar();mar[i][j].set='0';}getchar();}scanf("%d", &n);while(n--){scanf("%d%c", &t,&c);mar[t/10][t%10].set=c;grp[mar[t/10][t%10].group-'0'].set[(grp[mar[t/10][t%10].group-'0'].count++)]=c;}set(0,0);if(all==0) printf("0\n");return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.