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不可以读取空格。
还有就是,这题说明太少了,导致不知道怎么输入输出,汗……

原创粉丝点击