2012蓝桥杯本科组C/C++决赛题
2013-11-10 12:15
381 查看
星期几
View Code
#include <iostream> #include <cstring> using namespace std; const int N = 6; const char mark[N + 1] = "ABCDEF"; int n = 1; char map , s ; bool input(void) { int n; char x, y, c; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { cin >> map[i][j]; } } (cin >> n).get(); while(n--) { cin.get(x).get(y).get(c).get(); s[x-48][y-48] = c; } return !cin.eof(); } void clean(void) { n = 1; memset(s, 0, sizeof(int) * N * N); memset(map, 0, sizeof(int) * N * N); } void display(void) { for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { cout << s[i][j] << " "; } cout << endl; } } bool isOK(int x, int y, char ch) { for(int i = 0; i < N; i++) { if(s[i][y] == ch || s[x][i] == ch) { return false; } for(int j = 0; j < N; j++) { if(map[i][j] == map[x][y]) { if(s[i][j] == ch) { return false; } } } } return true; } void DFS(int x, int y) { if(x == N && y == 0) { cout << n++ << endl; display(); return; } if(s[x][y] == 0) { for(int i = 0; i < N ; i++) { if(isOK(x, y, mark[i])) { s[x][y] = mark[i]; if(y == N - 1) { DFS(x + 1, 0); } else { DFS(x, y + 1); } s[x][y] = 0; } } } else { if(y == N - 1) { DFS(x + 1, 0); } else { DFS(x, y + 1); } } } int main() { while(input()) { DFS(0, 0); clean(); } return 0; }
View Code
相关文章推荐
- 第三届蓝桥杯C++本科B组决赛解题报告(更新中)
- 蓝桥杯2015年第六届决赛C_C++程序设计本科B组(1. 积分之迷)
- 2012第三届蓝桥杯C本科决赛 第三题 常用汉字首字母
- 蓝桥杯2012年第三届决赛C_C++程序设计本科B组
- 第四届蓝桥杯C++本科B组决赛解题报告
- 2012第三届蓝桥杯C语言本科决赛题目
- 2012第三届蓝桥杯C本科决赛 第五题 “数独”游戏
- 2012蓝桥杯C++本科 大数乘法
- 2012第三届蓝桥杯本科组 C/C++真题及题解
- 2012蓝桥杯C++本科 奇怪的比赛
- 2012蓝桥杯C++本科 大数乘法
- 2012蓝桥杯C++本科 微生物繁殖
- 2012蓝桥杯预赛试题本科c++转方阵
- 蓝桥杯2012决赛JAVA本科组决赛第一题个人理解
- 2012蓝桥杯C++本科 微生物繁殖
- 2012蓝桥杯预赛试题本科c++比酒量
- 第三届蓝桥杯C++本科B组决赛解题报告(更新中)
- 第二届蓝桥杯C++本科B组决赛解题报告
- 2012蓝桥杯C++本科 奇怪的比赛
- 第五届蓝桥杯软件大赛C/C++本科B组决赛解题报告