POJ 1111-Image Perimeters这道题为什么第一次输入Sample Input是对的,第二次就不对了,急求那位大神来解

[复制链接]
查看11 | 回复1 | 2011-8-23 11:27:45 | 显示全部楼层 |阅读模式
#include
#include
int dir[8][2]={{0,1},{1,0},{-1,0},{0,-1},{1,-1},{-1,1},{1,1},{-1,-1}};
int n,m,s_x,s_y,s,sum;
int hash[21][21],num[401];
char map[21][21];
void dfs(int x,int y){
        int tx,ty,i;
        hash[x][y]=0;
        s++;
        for(i=0;i=0&&tx=0&&ty<m&&hash[tx][ty]&&map[tx][ty]=='X')
                        dfs(tx,ty);
        }
}
int main(){
        int i,j;
        while(scanf("%d%d%d%d",&n,&m,&s_x,&s_y),n||m||s_x||s_y){
                memset(num,0,sizeof(num));
                s=0;
                for(i=0;i<n;i++)
                        for(j=0;j<m;j++)       
                                hash[j]=1;
                for(i=0;i<n;i++)
                        scanf("%s",map);
                dfs(s_x-1,s_y-1);
                for(sum=0,i=1;i<=s;i++)
                        sum+=4-num;
                printf("%d\n",sum);
        }
        return 0;
}
求解!!!!急!!!!!!
那个printf("########i:%d num[]:%d s:%d\n",i,num,s);是测试数据的,可忽略

回复

使用道具 举报

千问 | 2011-8-23 11:27:45 | 显示全部楼层
memset(num,0,sizeof(num));memset(map,0,sizeof(map));初始化加多句就过了~原因在于~~没有初始化地图,所以对于第二次输入sample来说。虽然2x2是地图大小,但实际上7x7的范围内均布有上一次数据的地图值。而dfs在判断相邻X时,并没有先判定地图大小。所以第二次运行2x2那个sample时,拿了上一次7x7的地图中,2x2范围以外的数据做了相邻判定。另外num数组是统计每个格相邻的格子数吧?dfs过程中,应该是每个格子对应一个num的,但是递归的时候,全局变量s会发生变化。导致退出递归时,num的累加并不是加在对应项上。虽然,这不影响最终结果,因为num数组的元素总...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行