uva469
来源:互联网 发布:阿里云消息推送 编辑:程序博客网 时间:2024/06/14 09:55
#include <iostream>#include <cstdio>#include <string.h>using namespace std;int t;char map[110][110];bool vis[110][110];char tmp[110];int dir[8][2]= {1,0,0,1,0,-1,-1,0,1,1,-1,1,-1,-1,1,-1};int m,n;int ans;void dfs(int x,int y){ vis[x][y]=1; for(int k=0; k<8; k++) { int dx=x+dir[k][0]; int dy=y+dir[k][1]; if(!vis[dx][dy] && dx>=0 && dx<m && dy>=0 && dy<n && map[dx][dy]=='W') { ans++; dfs(dx,dy); } }}int main(){ cin>>t;//cin没有把换行符提走,gets()提走了,scanf没有提走 getchar(); getchar(); int end=0; while(t--) { m=0; n=0; if(end++) printf("\n"); while(gets(map[m++]) && !(map[m-1][0]>='0' && map[m-1][0]<='9')); n=strlen(map[0]); m--; strcpy(tmp,map[m]); do { int x,y; if(strlen(tmp)==0) break; memset(vis,0,sizeof(vis)); sscanf(tmp,"%d %d",&x,&y); ans=1; dfs(x-1,y-1); printf("%d\n",ans); } while(gets(tmp));//这里原本写了个函数判断的,是因为题意不明……,不写的话,速度提升了 } return 0;}/*2LLLLLLLLLLLWWLLWLLLWWLLLLLLLWWWLWWLLLLLWWWLLLLLLLLLLLLLLLWWLLWLLLWWWLLLLLLLLLLLLL7 5LLLLLLLLLLLWWLLWLLLWWLLLLLLLWWWLWWLLLLLWWWLLLLLLLLLLLLLLLWWLLWLLLWLWLLLLLLLLLLLLL7 4*/
这道题debug好久……
注释中的内容……还有就是,getline当文件结束时,也是返回EOF的,getline也可以遇到某个字符结束,默认是换行符。gets(t+1);也是可以的,就是动下指针。gets返回输入的字符串,getchar返回输入的字符,可以读取换行符。cin不能读空格,gets可以读取空格,scanf不可以读取空格。
还有就是,这题说明太少了,导致不知道怎么输入输出,汗……