POJ 3923 Ugly Windows 解题报告

来源:互联网 发布:英语同义词词典 知乎 编辑:程序博客网 时间:2024/06/14 00:28

原题链接:http://poj.org/problem?id=3923

题目大意:求出窗体是在顶部的窗体,并输出其代号。

源代码:

#include"iostream"#include"vector"using namespace std;const int max_len = 999;const int max_num = 999;char win[max_len][max_len];int ch[26],ch_len;struct index{int x,y;};vector<index> vec;int n,m,i,j;void count(){ch_len = 0;memset(ch,0,sizeof(ch));for(i = 0;i < n;i++){for(j = 0;j < m;j++){if(win[i][j] != '.' && ch[win[i][j] - 'A'] == 0)ch[win[i][j] - 'A'] = 1;}}}void work(){char k;for(k = 'A';k <= 'Z';k++){if(ch[k - 'A'] == 0)//对有出现的字母进行判断continue;vec.clear();//每次判断应该清空容器for(i = 0;i < n;i++){for(j = 0;j < m;j++){if(k == win[i][j]){index t;t.x = i;t.y = j;vec.push_back(t);}}}int min_x = max_num,min_y = max_num,max_x = 0,max_y = 0;for(i = 0;i < vec.size();i++){int x = vec[i].x;int y = vec[i].y;if(x < min_x)min_x = x;if(y < min_y)min_y = y;if(x > max_x)max_x = x;if(y > max_y)max_y = y;}//1.容器标个数与坐标算出的个数是否一致 || 2 和 3 (2 * 2的窗体不考虑) || 3.容器如果为空 //符合以上条件结束判断if((((max_x - min_x)+(max_y - min_y)) * 2 != vec.size()) || (max_x - min_x) == 1 || (max_y - max_y) == 1 || vec.size() == 0)continue;bool flag = true;for(i = min_x + 1;i < max_x - 1;i++){for(j = min_y + 1;j < max_y - 1;j++)if(isupper(win[i][j]))//对窗体内部进行判断 如果窗体是在顶部 内部应该是点 而不应有字母flag = false;}if(flag)cout << k;//输出顶部窗体代号}}int main(){while(cin >> n >> m){if(m == 0 &&n == 0)break;memset(ch,0,sizeof(ch));for(i = 0 ;i < n;i++){for(j = 0 ;j < m;j++){cin >> win[i][j];}}count();//判断有几个字母work();//找出窗体并输出cout << endl;}return 0;}


1 0
原创粉丝点击