这题题意还是比较简单的,,,就是一个BFS嘛。。。。两种表示所有黑色点的方式,,,要求给一种写另一种,,,,,,,
这是之前的代码。。一直RUNTIME ERROR。。。。。呃
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.h>
using namespace std;
int a[5000],b[5000];
char s[60];
struct node
{
int x,y;
}aa[100];
int d[100][100];
int jilu[10000][1000];
int yazhan[100][2];
int cmp(const void *a,const void *b)
{
struct node *c=(node*)a;
struct node *d=(node*)b;
if(c->x==d->x) return c->y - d->y;
return c->x-d->x;
}
char qwe[10];
int main()
{
gets(qwe);
if(strlen(qwe)>1)
{
int a,b;
a=qwe[0]-'0';
b=qwe[2]-'0';
aa[0].x=a;
aa[0].y=b;
int u=1;
int q=1;
while(scanf("%s",s)&&s[0]!='.')
{
int t=0;
while(s[t]!=',')
{
if(s[t]=='B')
{
aa[u].x=a;
aa[u].y=b-1;
u++;
}
if(s[t]=='R')
{
aa[u].x=a+1;
aa[u].y=b;
u++;
}
if(s[t]=='T')
{
aa[u].x=a;
aa[u].y=b+1;
u++;
}
t++;
}
a=aa[q].x;
b=aa[q].y;
q++;
}
qsort(aa,q,sizeof(struct node),cmp);
printf("%d\n",q);
for(int i=0;i<q;i++)
{
printf("%d %d\n",aa[i].x,aa[i].y);
}
}
else
{
memset(d,0,sizeof(d));
int m;
m=qwe[0]-'0';
int i;
int er,rt;
int q,w;
for(i=0;i<m;i++)
{
scanf("%d %d",&er,&rt);
if(i==0) q=er,w=rt;
d[er][rt]=1;
}
printf("%d %d\n",q,w);
memset(jilu,0,sizeof(jilu));
int u=0;
int r=0;
while(1)
{
if(d[q][w-1]!=0&&jilu[q][w-1]!=1)
{
yazhan[u][0]=q;
yazhan[u][1]=w-1;
jilu[q][w-1]=1;
u++;
printf("B");
}
if(d[q+1][w]!=0&&jilu[q+1][w]!=1)
{
yazhan[u][0]=q+1;
yazhan[u][1]=w;
jilu[q+1][w]=1;
u++;
printf("R");
}
if(d[q][w+1]!=0&&jilu[q][w+1]!=1)
{
yazhan[u][0]=q;
yazhan[u][1]=w+1;
jilu[q][w+1]=1;
u++;
printf("T");
}
jilu[q][w]=1;
q=yazhan[r][0];
w=yazhan[r][1];
r++;
if(r<m) printf(",\n");
else {printf(".\n"); break; }
}
}
return 0;
}
AC代码(1Ms,,,连我自己都惊呆了)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include<bits/stdc++.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]) != -1)
{
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);
}
}
}
}
}
}