#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;
}
}
232 - Crossword Answers
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.