原文网址:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=830&problem=168&mosmsg=Submission+received+with+ID+16222325
纵横字谜游戏.........
具体的输入输出还是看提议和样例吧.........
就是循环对字符串进行处理,控制好输出..........
#include<stdio.h>
#include<string.h>
char x[15][15];
int n,m,t=0,vis[15][15];
void slove()
{
int i,j,cnt=0;
memset(vis,0,sizeof(vis));//清空标记数组
for(i=0;i<n;++i)//标号
{
for(j=0;j<m;++j)
{
if((i==0||j==0||x[i-1][j]=='*'||x[i][j-1]=='*')&&x[i][j]!='*')
//位于边界、上边或者左边有 * 号
{
vis[i][j]=++cnt;//标上号
}
}
}
printf("Across\n");
for(i=0;i<n;++i)
{
for(j=0;j<m;++j)
{
if((j==0||x[i][j-1]=='*')&&x[i][j]!='*')//左边没有 *
{
printf("%3d.",vis[i][j]);//这个格式就需要注意看输出了......
while(j<m&&x[i][j]!='*')//注意输出的跳出
{
printf("%c",x[i][j]);
++j;
}
printf("\n");
}
}
}
printf("Down\n");//下面和上面一样,只是方向变为纵向
for(i=0;i<n;++i)
{
for(j=0;j<m;++j)
{
if((i==0||x[i-1][j]=='*')&&x[i][j]!='*')
{
printf("%3d.",vis[i][j]);
int k=i;
while(k<n&&x[k][j]!='*')
{
printf("%c",x[k][j]);
++k;
}
printf("\n");
}
}
}
}
int main()
{
//freopen("shuju.txt","r",stdin);
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(int i=0;i<n;++i)
{
getchar();
for(int j=0;j<m;++j)
{
scanf("%c",&x[i][j]);
}
}
if(t)//控制空行
{
printf("\n");
}
printf("puzzle #%d:\n",++t);//格式
slove();
}
return 0;
}