232 - Crossword Answers

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct cell
{
	int id;
	string word;
	cell(int i,const string & w):id(i),word(w){}
	bool operator<(const cell & c)const{
		return id<c.id;
	}
};
void display(const vector<cell> & vec)
{
	for(int i = 0 ;i<vec.size();i++){
		printf("%3d.%s\n",vec[i].id,vec[i].word.c_str());
	}
}
int main()
{
	int r,c;
	vector<string> vec;
	vector<vector<int> >id;
	string input;
	cin>>r;
	vector<cell> words;
	string word;
	int cnt = 0;
	bool first= true;
	while(r != 0 )
	{
		if(first == true)first= false;
		else cout<<"\n";
		cin>>c;
		cnt++;
		vec.resize(r);
		id.resize(r);
		for(int i=0;i<r;i++){
			cin>>vec[i];
			id[i].resize(c);
		}
		int idx=1;
		for(int i=0;i<r;i++){
			for(int j=0;j<c;j++){
				if(vec[i][j] == '*')continue;
				int x = i -1,y= j -1;
				if(x<0 || y < 0 || vec[x][j] =='*' || vec[i][y] == '*'){
					id[i][j]=idx++;
				}
			}
		}
		int idd;
		words.clear();
		word.clear();
		for(int i=0;i<r;i++)
		{
			idd = id[i][0];
			for(int j=0;j<c;j++)
			{
				if(vec[i][j] == '*'){
					if(word.empty() == false){
						words.push_back(cell(idd,word));
					}
					word.clear();
					if(j+1<c)idd=id[i][j+1];
					continue;
				}
				else{
					word+=vec[i][j];
				}
			}
			if(word.empty() == false){
			words.push_back(cell(idd,word));
			}
			word.clear();
		}
		sort(words.begin(),words.end());
		printf("puzzle #%d:\n",cnt);
		printf("Across\n");
		display(words);
		words.clear();
		word.clear();
		for(int i=0;i<c;i++)
		{
			idd= id[0][i];
			for(int j=0;j<r;j++)
			{
				if(vec[j][i] == '*'){
					if(word.empty() == false){
						words.push_back(cell(idd,word));
					}
					word.clear();
					if(j+1<r)idd=id[j+1][i];
					continue;
				}
				else{
					word+=vec[j][i];
				}
			}
			if(word.empty() == false){
			words.push_back(cell(idd,word));
			}
			word.clear();
		}
		sort(words.begin(),words.end());
		printf("Down\n");
		display(words);
		cin>>r;
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章