Crossword Answers
直接按照要求寻找遍历一遍即可
AC代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
char s[15][15];
int num[15][15];
int n,m;
void Init()
{
int cnt=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(s[i][j]=='*')
continue;
if(i==0||j==0||s[i-1][j]=='*'||s[i][j-1]=='*')
{
cnt++;
num[i][j]=cnt;
}
}
}
}
void Across()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;)
{
if(s[i][j]!='*')
{
printf("%3d.",num[i][j]);
while(s[i][j]!='*')
{
printf("%c",s[i][j]);
j++;
if(j>=m)
break;
}
printf("\n");
}
else
j++;
}
}
}
void Down()
{
bool vis[15][15];
ms(vis);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(vis[i][j]==true||s[i][j]=='*')
continue;
printf("%3d.",num[i][j]);
int t=i;
while(s[t][j]!='*'&&t>=0&&t<n&&j>=0&&j<m)
{
printf("%c",s[t][j]);
vis[t][j]=true;
t++;
if(t>n)
break;
}
printf("\n");
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
//freopen("out.txt", "w", stdout);
int cnt=0;
while(scanf("%d",&n)&&n)
{
cnt++;
if(cnt!=1)
printf("\n");
scanf("%d",&m);
for(int i=0;i<n;i++)
scanf("%s",s[i]);
ms(num);
Init();
printf("puzzle #%d:\n",cnt);
printf("Across\n");
Across();
printf("Down\n");
Down();
}
return 0;
}