1 条题解
-
0
题意分析
题目要求解析填字游戏的解决方案,输出所有横向(Across)和纵向(Down)的单词列表。填字游戏由的黑白方格组成,白色方格包含字母,黑色方格用"*"表示。每个白色方格按特定规则编号:1)位于第一行;2)左侧或上方紧邻黑色方格。横向单词从编号方格开始,连续向右延伸至黑色方格或行尾;纵向单词同理向下延伸。需按编号顺序输出所有单词。
解题思路
代码通过模拟实现:1)标记所有符合条件的方格编号;2)扫描每行提取横向单词,每列提取纵向单词;3)将单词按编号存入向量并输出。具体步骤:1)用二维数组和分别存储原始网格;2)用记录方格编号;3)遍历网格,根据规则计算编号;4)提取横向单词时,从左到右扫描每行,遇到白色方格则连续读取直到结束;5)提取纵向单词同理;6)按格式输出结果,注意编号宽度为3位。
#include <iostream> #include <cstdio> #include <vector> #include <string> #include <cstring> using namespace std; //英语 看博友程序 抄博友程序 模拟 char a1[20][20]; char a2[20][20]; int da[20][20]; struct nod { string s; int id; nod(string a, int b) { s = a; id = b; } }; int main() { int tag = 0; int n, m; while (1) { tag++; cin >> n; if (n == 0) { break; } cin >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a1[i][j]; a2[i][j] = a1[i][j]; } } /* for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cout<<a1[i][j]<<" "; } cout<<endl; }*/ int js = 1; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a1[i][j] != '*') if ((i == 0 || j == 0) || ((a1[i - 1][j] == '*' && (i - 1) >= 0) || (a1[i][j - 1] == '*' && (j - 1) >= 0))) { da[i][j] = js++; } } } /* for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { cout<<da[i][j]<<" "; } cout<<endl; }*/ vector<nod> ve1; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a1[i][j] != '*') { int k = j; string s = ""; while (a1[i][k] != '*' && k < m) { s += a1[i][k]; a1[i][k] = '*'; k++; } //cout<<s<<" "<<da[i][j]<<endl; ve1.push_back(nod(s, da[i][j]));//(nod){s,da[i][j]} CE } } } vector<nod> ve2; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a2[i][j] != '*') { int k = i; string s = ""; while (a2[k][j] != '*' && k < n) { s += a2[k][j]; a2[k][j] = '*'; k++; } ve2.push_back(nod(s, da[i][j]));//(nod){s,da[i][j]} CE } } } printf("puzzle #%d:\n", tag); printf("Across\n"); for (int i = 0; i < ve1.size(); i++) { printf("%3d.%s\n", ve1[i].id, ve1[i].s.c_str()); } printf("Down\n"); for (int i = 0; i < ve2.size(); i++) { printf("%3d.%s\n", ve2[i].id, ve2[i].s.c_str()); } printf("\n"); } return 0; }
- 1
信息
- ID
- 889
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者