问题描述
- 关于HDU 1045题,一直wa,求大神解释
-
http://acm.hdu.edu.cn/showproblem.php?pid=1045
自己试了是对的,没错,可是就是WA#include<stdio.h> int main() { int huanjilu[10][10]; char map[10][10]; int juzhen,num; while(scanf("%d",&juzhen)) { int ju; if(juzhen==0)break; for(int i = 0;i<=9;i++) { for(int j = 0;j<=9;j++) { huanjilu[i][j] = -1; } } for(int i= 0;i<=9;i++)//对地图赋于全墙值 { for(int j=0;j<=9;j++) { map[i][j] = 'X'; } }//over getchar();//用于消耗回车 for(int i = 1;i<=juzhen;i++)//输入地图 { for(int j = 1;;j++) { scanf("%c",&map[i][j]); if(map[i][j]=='n') { map[i][j]='X'; ju=j-1; break; } } }//over int count=0; for(int i = 1;i<=juzhen;i++)//对每个点的周围环境空数记录 { for(int j = 1;j<=ju;j++) { if(map[i][j]!='X') { if(map[i-1][j]!='X')count++; if(map[i+1][j]!='X')count++; if(map[i][j-1]!='X')count++; if(map[i][j+1]!='X')count++; huanjilu[i][j] = count; count = 0; } } }//over int x=0,y=0; num=0; for(int i = 1;i<=juzhen;i++)//对地图中的最小环境搜索 { for(int j = 1;j<=ju;j++)//找到第一个不为x的位置 { if(huanjilu[i][j]!=-1 && huanjilu[i][j]!=-2) { int min = huanjilu[i][j]; x=i,y=j; for(int m=i;m<=juzhen;m++) { for(int n=1;n<=ju;n++) { if(map[m][n]=='.' && huanjilu[m][n]!=-2 && huanjilu[m][n]!=-1) { if(min>huanjilu[m][n]) { min = huanjilu[m][n]; x = m; y = n; } } } } huanjilu[x][y] = -2; map[x][y]='l'; int x1,y1; bool up,down,right,left; up=down=right=left=false; for(x1=x-1;x1>=0;x1--)// { if(map[x1][y]=='l') { map[x][y]='.'; break; } if(map[x1][y]=='X') { up=true; break; } }//up for(x1=x+1;x1<=juzhen+1;x1++) { if(map[x1][y]=='l') { map[x][y]='.'; break; } if(map[x1][y]=='X') { down=true; break; } }//down for(y1=y-1;y1>=0;y1--) { if(map[x][y1]=='l') { map[x][y]='.'; break; } if(map[x][y1]=='X') { left=true; break; } } for(y1=y+1;y1<=ju+1;y1++) { if(map[x][y1]=='l') { map[x][y]='.'; break; } if(map[x][y1]=='X') { right=true; break; } } j--; if(left==true && right==true && up==true && down==true) { num++; } } } } printf("%dn",num); } return 0; }
时间: 2024-09-14 09:22:45