P1027木瓜地

来源:互联网 发布:天刀男捏脸数据 编辑:程序博客网 时间:2024/04/20 06:31
描述 Description
Bessie不小心游荡出Farmer John的田地,而走进了相邻的农民的地。她举起一个木瓜,木
瓜对奶牛来说可是不可多得得美味。这个木瓜林像一般的威斯康星州的田地一样被分割成一个
R行C列的网格(1 <= R <= 40, 1 <= C <= 40)。Bessie可以从一个格沿著一条跟X轴或
Y轴平行的直线走到邻接的令一个格。Bessie发现一开始她自己在木瓜林的(1,1),也就是第
一行第一列慢悠悠地咀嚼著木瓜。

Bessie总是用她最信赖地双筒望远镜去数每一个邻接的格的低掛著的木瓜的数目。然后她就游
荡到那个有最多没有被吃掉的木瓜的邻接的格子(保证这洋的格子只有一个)。

按照这种移动方法,最终Bessie总是会在(R,C)停止然后吃掉那裡的木瓜。

给定这个木瓜林的大小及每个格的木瓜数F_ij(1 <= F_ij <= 100), 要求Bessie一共吃了
多少个木瓜。
输入格式 InputFormat
* 第一行: 两个空格隔开的整数R和C.

* 第2到R+1行: 第i+1行有C个空格隔开的整数,表示第i行的每个格的水果数。也就是F_i1, 
F_i2, ..., F_iC.
输出格式 OutputFormat
* 第一行: 一个单独的整数,表示到Bessie吃完右下角(R,C)的木瓜回到牛棚的时候為止,
一共在木瓜林吃掉了多少个木瓜。

 

//  因为没有将ff[1][1]初始化为0,就WA了两次...童鞋们注意了..

代码:

01/*
02搜索,因为题目中说明了不会出现死胡同的情况,
03所以正常模拟即可。
04*/
05#include <stdio.h>
06int f[50][50],ff[50][50];
07int main()
08{
09    int R,C,i,j,k;
10    while(scanf("%d %d",&R,&C)!=EOF)
11    {
12        for(i=1;i<=R;i++)
13            for(j=1;j<=C;j++)
14            {scanf("%d",&f[i][j]);ff[i][j]=1;}
15            //ff[][]为1,表示可以走;
16        int num=0;
17        i=j=1;num=num+f[1][1];ff[i][j]=0;
18        while(i<=R && j<=C)
19        {
20            int a,b,c,d,max=0;//代表上下左右;
21            if(ff[i-1][j])a=f[i-1][j];else a=-1;if(a>max) max=a;
22            if(ff[i+1][j])b=f[i+1][j];else b=-1;if(b>max) max=b;
23            if(ff[i][j+1])c=f[i][j+1];else c=-1;if(c>max) max=c;
24            if(ff[i][j-1])d=f[i][j-1];else d=-1;if(d>max) max=d;
25             
26            if(max==a){i=i-1;num=num+f[i][j];ff[i][j]=0;}
27            else if(max==b){i=i+1;num=num+f[i][j];ff[i][j]=0;}
28            else if(max==c){j=j+1;num=num+f[i][j];ff[i][j]=0;}
29            else if(max==d){j=j-1;;num=num+f[i][j];ff[i][j]=0;}
30            if(i==R && j==C) break;
31        }
32        printf("%d\n",num);
33    }
34    return 0;
35}

 

 

 

 

 

0 0
原创粉丝点击