https://vjudge.net/problem/UVA-232

题意:

输入一个r行c列的网格,黑格用“*”来表示,每个白格都填有一个字母。如果一个白格的左边或者上边的相邻位置没有白格(可能是黑格,也可能没有格子),则这个白格式一个起始格子。首先把所有的起始格子按照从上到下,从左到右的编号为1,2,3,……。找出所有的横向单词,这些单词必须从一个起始格子开始,这些单词必须从一个起始格子开始,向右延伸到一个黑格的左边或者整个网格的最右列。竖向单词类似。

思路:

简单模拟,不过需要注意起始格子的判断情况,其实也不难,用一个结构体保存结果,最后按照id排序就可以了。

代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <vector>
  4 #include <string>
  5 #include <iostream>
  6 #include <algorithm>
  7 using namespace std;
  8
  9 struct node
 10 {
 11     int id;
 12     string s;
 13 };
 14
 15 char a[15][15];
 16 int b[15][15];
 17
 18 vector<node> row;
 19 vector<node> col;
 20
 21 bool cmp(node aa,node bb)
 22 {
 23     return aa.id < bb.id;
 24 }
 25
 26 int main()
 27 {
 28     int cas = 0;
 29
 30     int r,c;
 31
 32     while (scanf("%d",&r) != EOF)
 33     {
 34         if (r == 0) break;
 35
 36         row.clear();col.clear();
 37
 38         scanf("%d",&c);
 39
 40         int bh = 1;
 41
 42         for (int i = 0;i < r;i++)
 43             scanf(" %s",a[i]);
 44
 45         for (int i = 0;i < r;i++)
 46             for (int j = 0;j < c;j++)
 47         {
 48             if (a[i][j] != '*')
 49             {
 50                 if (i - 1 < 0 || j - 1 < 0)
 51                 {
 52                     b[i][j] = bh++;
 53                 }
 54                 else if (i - 1 >= 0 && a[i-1][j] != '*' && j - 1 >= 0 && a[i][j-1] != '*') continue;
 55                 else b[i][j] = bh++;
 56
 57             }
 58         }
 59
 60         for (int i = 0;i < r;i++)
 61         {
 62             int st = 0;
 63
 64             while (st < c)
 65             {
 66                 string tmp;
 67
 68                 while (a[i][st] == '*') st++;
 69
 70                 int id = b[i][st];
 71
 72                 for (;a[i][st] != '*' && st < c;st++)
 73                 {
 74                     tmp.push_back(a[i][st]);
 75                 }
 76
 77
 78                 if (tmp.size() > 0)
 79                 {
 80                     node tt;
 81                     tt.s = tmp;
 82                     tt.id = id;
 83
 84                     row.push_back(tt);
 85                 }
 86             }
 87
 88         }
 89
 90
 91         for (int j = 0;j < c;j++)
 92         {
 93             int st = 0;
 94
 95             while (st < r)
 96             {
 97                 string tmp;
 98
 99                 while (a[st][j] == '*') st++;
100
101                 int id = b[st][j];
102
103                 for (;a[st][j] != '*' && st < r;st++)
104                 {
105                     tmp.push_back(a[st][j]);
106                 }
107
108
109                 if (tmp.size() > 0)
110                 {
111                     node tt;
112                     tt.s = tmp;
113                     tt.id = id;
114
115                     col.push_back(tt);
116                 }
117             }
118
119         }
120
121
122         sort(row.begin(),row.end(),cmp);
123         sort(col.begin(),col.end(),cmp);
124
125         if (cas) puts("");
126
127         printf("puzzle #%d:\n",++cas);
128
129         printf("Across\n");
130
131         for (int i = 0;i < row.size();i++)
132         {
133             printf("%3d.",row[i].id);
134             cout << row[i].s << endl;
135         }
136
137         printf("Down\n");
138
139         for (int i = 0;i < col.size();i++)
140         {
141             printf("%3d.",col[i].id);
142             cout << col[i].s << endl;
143         }
144     }
145
146
147     return 0;
148 }

转载于:https://www.cnblogs.com/kickit/p/7253891.html

uva 232 Crossword Answers相关推荐

  1. UVA - 232 ​​​​​​​Crossword Answers

    Crossword Answers UVA - 232 题目传送门 直接按照要求寻找遍历一遍即可 AC代码: #include <cstdio> #include <iostream ...

  2. uva 232 - Crossword Answers(纵横迷宫)

    习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232) 输入一个r行c列(1≤r,c≤10)的网格,黑格用" ...

  3. UVa 232 - Crossword Answers

    昨晚看了看,感觉还可以,就把这题写出来了,刚才交的的是WA了一次,原因是最后多了个空行.改了下空行出现的位置,AC了.不得不说UVA判的真严. #include<stdio.h> char ...

  4. Uva 232.Crossword Answers

    下面的输出一定要是%3d的格式来输出序号 另外注意两个解之间的空格 1 #include <cstdio> 2 #include <cstring> 3 using names ...

  5. 232 Crossword Answers

    我用了一天多的时间来做这个题,从连题都看不懂,到思路混乱,到写出来差不多能运行但是有bug的代码,再到将自己写的一百行代码缩减到五十行,再到算法的逐渐精炼,我不管我能写多少代码,但是我希望我写的代码都 ...

  6. UVA232 纵横字谜的答案 Crossword Answers 题解

    题意翻译 输入一个r 行c 列(1<r,.c<10) 的网格,黑格用"*"每个白格都填有一个字母.如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能 ...

  7. 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)

    原题vjudge 输入一个r行c列(1≤r,c≤10)的网格,黑格用"*"表示,每个白格都填有一个字母. 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出 ...

  8. I - Crossword Answers

    题目描述 输入一个r行c列(1<=r,c<=10)的网格,黑格用"*"表示,每个白格都填有一个字母,如果一个白格的左边相邻的位置或者边上相邻的位置没有白格(可能是黑格, ...

  9. UVa232 Crossword Answers(纵横字谜的答案)

    题意: 输入一个r行c列的网格,*表示黑格,字母表示白格.若一个白格位于边界或上方是黑格或左方是黑格,则称其为起始格.找出所有横向单词和竖向单词,其必须从一个起始格开始,到黑格或网格边界为止. 思路: ...

最新文章

  1. linux sudo命令
  2. 写一个sql实现以下查询结果_SQL 优化极简法则,你掌握了几个?
  3. input type=range标签用法实例代码
  4. python基础教程: os.stat() 和 stat模块详解
  5. oracle12C要求aix系统版本,Oracle 12c RAC for AIX7.1(三)系统参数
  6. npm ERR! the command again as root/Administrator
  7. linux ubuntu 安装jdk
  8. 删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
  9. 注册登录时本地图片验证码
  10. flash 绘图API:绘制秀曲线图形
  11. TBS 腾讯浏览服务(X5WebView) 集成指南
  12. vs2019编译libcef
  13. Leetcode第904题
  14. 最有效地戒掉晚睡强迫症(熬夜强迫症、假象失眠症等等)
  15. 电商网站建设步骤_电商网站建设的注意事项_OctShop
  16. 深度学习笔记 —— 微调
  17. 焦点科技股份有限公司--软件测试--《社招、校招jd、公司介绍、培训发展、薪酬福利、公益慈善》整理
  18. 杭电计算机专业期末考试助攻,杭电嘻哈:舶来文化亦可玩出小清新
  19. 手游开发攻防——二、基础篇
  20. ESIM模拟器生成事件使用流程

热门文章

  1. 北航校赛2014 预赛 题解
  2. 表单提交数据大小的限制
  3. MySQL 服务挂了 CPU 消耗接近 100% 你知道怎么回事吗???
  4. Springboot07配制数据统一返回格式以及定义统一的异常处理类
  5. Android-Activity中的onNewIntent()方法调用简析
  6. LightOj 1027 A Dangerous Maze
  7. MONyog-数据库性能监控工具
  8. Loadrunner11完美破解小笔记
  9. drupal 7在一个form新增或者修改一个字段
  10. Android UI 优化——使用HierarchyViewer工具