P1027 木瓜地

描述 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}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值