注释很清楚了,UVAdebug所有样例过了,题目样例也过了,自己看了同学看了,他喵的就是WA
咱就是说如果有人看出我为啥错了我给他赏金一块,气炸了
#include <bits/stdc++.h>
using namespace std;
string str[15];//存储二维数组
//存标号和状态结构体
struct Z{
int num;
int S=0;
};
Z Y[15][15];
//int Y[10][10];//标记数组
//横向比较
int hengxiangshuchu(int i,int j,int b){
int k;//全程改变j
for(k=j;k<b;k++){
//若合法且没有输出过
if(str[i][k]!='*'&&Y[i][k].S==0){
//输出并更改状态
cout<<str[i][k];
Y[i][k].S=1;
}//遇到第一个已输出或者不合法就停下来,横向只会遇到不合法
else break;
}//输出完换行
cout<<endl;
return k++;//直接更新j的坐标从下一个开始查
}
void zongxiangshuchu(int i,int j,int a){
int k;//全程改变i
for(k=i;k<a;k++){
//若合法且没有输出过
if(str[k][j]!='*'&&Y[k][j].S==0){
//输出
cout<<str[k][j];
Y[k][j].S=1;
}
else
break;
}
cout<<endl;
return;
}
void xunhuanshuchu(int a,int b){
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
//从头开始搜查,合法且没输出过
if(str[i][j]!='*'&&Y[i][j].S==0){
//输出编号+本尊
printf("%3d",Y[i][j].num);
cout<<"."<<str[i][j];
Y[i][j].S=1;//更新状态,持续输出
j=hengxiangshuchu(i,j+1,b);
}
}
}
//全员归零
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
Y[i][j].S=0;
}
}
cout<<"Down"<<endl;
//memset(Y.S,0,sizeof(Y.S));
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(str[i][j]!='*'&&Y[i][j].S==0){
//从头开始搜查,合法且没输出过
printf("%3d",Y[i][j].num);
cout<<"."<<str[i][j];
Y[i][j].S=1;
zongxiangshuchu(i+1,j,b);
}
}
}
}
int panduan1(int i,int j,int a,int b){
if(str[i][j]!='*'){
if(!i||!j)
return 1;
else if(str[i-1][j] == '*' || str[i][j-1] == '*')
return 1;
}
return 0;
}
int main(){
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int sum=0;
int a,b;
while(cin>>a&&a!=0){
sum++;
cin>>b;
getchar();
for(int i=0;i<a;i++){
getline(cin,str[i]);
//getchar();
}
int num=1;
//对所有合格数进行标定
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(panduan1(i,j,a,b)){//若符合条件记录号码
Y[i][j].num=num;
num++;
Y[i][j].S=0;
}
else{
Y[i][j].num=0;
Y[i][j].S=0;
}
}
}
if(sum>1)
cout<<endl;
cout<<"puzzle #"<<sum<<":"<<endl;
cout<<"Across"<<endl;
xunhuanshuchu(a,b);
}
return 0;
}