现在的位置: 首页 > 综合 > 正文

杭电1241(搜索) (2010-12-12 20:00)

2013年12月02日 ⁄ 综合 ⁄ 共 1073字 ⁄ 字号 评论关闭

开始题目楞是没看懂,看了10分钟什么都不知道,都想放弃了,想想在看5分钟,于是我照着Google翻译和原题目又看了一便,懂了.

接下来就是敲代码,最后复制测试数据,但是网站的数据写错了(多了个回车),将信将疑的提交,竟然一次通过

 

#include<stdio.h>
#define N 100
char juzhen[N+2][N+2],flag,kz[N+2][N+2];
int work[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1};
void fun(int row,int col,int n,int m){
 int i,j,temp=1;
 //判断什么时候加一个油库 
 if(juzhen[row][col]=='@'){
  for(i=0;i<8;i++){
   if(!kz[row+work[i][0]][col+work[i][1]] && juzhen[row+work[i][0]][col+work[i][1]]=='@' && row+work[i][0] >=0 && row + work[i][0]<n && col+work[i][1]>=0 && col+work[i][1]<m){   
    temp=0;
   }
  }
  if(temp){
   flag++;
  }
 }
 //搜索相同的油库 
 for(i=0;i<8;i++){
  if(kz[row+work[i][0]][col+work[i][1]] && juzhen[row][col]=='@' && row+work[i][0] >=0 && row + work[i][0]<n && col+work[i][1]>=0 && col+work[i][1]<m){
   kz[row][col]=0;
   fun(row+work[i][0],col+work[i][1],n,m);
  }
 }
}
int main()
{
 int n,m,i,j;
 while(scanf("%d%d",&n,&m)!=EOF){
  getchar();
  if(n==0 && m==0) return 0; 
  for(i=0;i<n;i++){
   gets(juzhen[i]);
  }
  for(i=0;i<n;i++)
   for(j=0;j<m;j++) 
    kz[i][j]=1;
  flag=0;
  for(i=0;i<n;i++){
   for(j=0;j<m;j++)
    fun(i,j,n,m);
  }
  printf("%d\n",flag);
 }
 return 0;
}

抱歉!评论已关闭.