经过大牛指点我终于明白了-。-,不过WA的那个思路不可以的原因还不懂
最后一种代码AC:
#include<stdio.h>
#include<string.h>
int to[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int mark[12][12];
int vis[12][12];
int sx,sy;
int nx,ny;
int m,n;
int cnt;
char eva[144][6];
struct node
{
int x,y;
}queue[144],now,next;
void bfs1(int tx,int ty)
{
int fr,ed,i;
fr=ed=0;
queue[ed].x=tx;
queue[ed++].y=ty;
vis[tx][ty]=1;
while(fr<ed)
{
now=queue[fr++];
for(i=0;i<4;i++)
{
next.x=now.x+to[i][0];
next.y=now.y+to[i][1];
if(mark[next.x][next.y]==0||vis[next.x][next.y]==1)
{
continue;
}
if(i==0)
{
printf("R");
}
else if(i==1)
{
printf("T");
}
else if(i==2)
{
printf("L");
}
else if(i==3)
{
printf("B");
}
vis[next.x][next.y]=1;
queue[ed++]=next;
}
if(fr<n)
{
puts(",");
}
else
{
puts(".");
}
}
}
int bfs2(int tx,int ty)
{
int fr,ed,i;
fr=ed=0;
queue[ed].x=tx;
queue[ed++].y=ty;
mark[tx][ty]=1;
cnt=1;
while(fr<ed)
{
now=queue[fr++];
if(eva[fr-1][0]=='.')
{
continue;
}
for(int i=0;eva[fr-1][i]!=',';i++)
{
if(eva[fr-1][i]=='R')
{
next.x=now.x+1;
next.y=now.y;
queue[ed++]=next;
cnt++;
mark[next.x][next.y]=1;
}
else if(eva[fr-1][i]=='T')
{
next.x=now.x;
next.y=now.y+1;
queue[ed++]=next;
cnt++;
mark[next.x][next.y]=1;
}
else if(eva[fr-1][i]=='L')
{
next.x=now.x-1;
next.y=now.y;
queue[ed++]=next;
cnt++;
mark[next.x][next.y]=1;
}
else if(eva[fr-1][i]=='B')
{
next.x=now.x;
next.y=now.y-1;
queue[ed++]=next;
cnt++;
mark[next.x][next.y]=1;
}
}
}
return cnt;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int k=0;
memset(mark,0,sizeof(mark));
memset(vis,0,sizeof(vis));
scanf("%s",eva[k++]);
if(eva[0][0]>='0'&&eva[0][0]<='9')
{
sx=m;
sy=eva[0][0]-'0';
mark[sx][sy]=1;
for(int i=0;i<n-1;i++)
{
scanf("%d%d",&nx,&ny);
mark[nx][ny]=1;
}
printf("%d %d\n",sx,sy);
bfs1(sx,sy);
}
else
{
while(scanf("%s",eva[k])!=EOF)
{
if(eva[k][0]=='.')
{
break;
}
k++;
}
printf("%d\n",bfs2(n,m));
for(int i=0;i<=10;i++)
{
for(int j=0;j<=10;j++)
{
if(mark[i][j]==1)
{
printf("%d %d\n",i,j);
}
}
}
}
}
}
第二种,我认为输入字符串的时候只要考虑有多少行就有多少个点就可以了,直接记录eva这一数组的数量+1就可以了吧,可是WA了,求指点
WA:
#include<stdio.h>
#include<string.h>
int to[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int mark[12][12];
int vis[12][12];
int sx,sy;
int nx,ny;
int m,n;
int cnt;
char eva[144][6];
struct node
{
int x,y;
}queue[144],now,next;
void bfs1(int tx,int ty)
{
int fr,ed,i;
fr=ed=0;
queue[ed].x=tx;
queue[ed++].y=ty;
vis[tx][ty]=1;
while(fr<ed)
{
now=queue[fr++];
for(i=0;i<4;i++)
{
next.x=now.x+to[i][0];
next.y=now.y+to[i][1];
if(mark[next.x][next.y]==0||vis[next.x][next.y]==1)
{
continue;
}
if(i==0)
{
printf("R");
}
else if(i==1)
{
printf("T");
}
else if(i==2)
{
printf("L");
}
else if(i==3)
{
printf("B");
}
vis[next.x][next.y]=1;
queue[ed++]=next;
}
if(fr<n)
printf(",\n");
else printf(".\n");
}
}
void bfs2(int tx,int ty)
{
int fr,ed,i;
fr=ed=0;
queue[ed].x=tx;
queue[ed++].y=ty;
mark[tx][ty]=1;
while(fr<ed)
{
now=queue[fr++];
if(eva[fr-1][0]=='.')
{
continue;
}
for(int i=0;eva[fr-1][i]!=',';i++)
{
if(eva[fr-1][i]=='R')
{
next.x=now.x+1;
next.y=now.y;
}
else if(eva[fr-1][i]=='T')
{
next.x=now.x;
next.y=now.y+1;
}
else if(eva[fr-1][i]=='L')
{
next.x=now.x-1;
next.y=now.y;
}
else if(eva[fr-1][i]=='B')
{
next.x=now.x;
next.y=now.y-1;
}
queue[ed++]=next;
mark[next.x][next.y]=1;
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
int k=0;
memset(mark,0,sizeof(mark));
memset(vis,0,sizeof(vis));
scanf("%s",eva[k++]);
if(eva[0][0]>='0'&&eva[0][0]<='9')
{
sx=m;
sy=eva[0][0]-'0';
mark[sx][sy]=1;
for(int i=0;i<n-1;i++)
{
scanf("%d%d",&nx,&ny);
mark[nx][ny]=1;
}
printf("%d %d\n",sx,sy);
bfs1(sx,sy);
}
else
{
while(scanf("%s",eva[k])!=EOF)
{
if(eva[k][0]=='.')
{
break;
}
k++;
}
bfs2(n,m);
printf("%d\n",k+1);
for(int i=0;i<=10;i++)
{
for(int j=0;j<=10;j++)
{
if(mark[i][j]==1)
{
printf("%d %d\n",i,j);
}
}
}
}
}
}
求大牛啊!_(:з」 ∠)_