001-枚舉問題---討厭的青蛙

問題描述:

? ? 。 在韓國戒努, 有一種青蛙

请敦。 每到晚上,這種青蛙會跳躍稻田柏卤,從而踩踏稻子

冬三。 農(nóng)民早上看到被踩踏的稻子, 希望找到造成最大損害的那只青蛙經(jīng)過的路徑

缘缚。 每只青蛙總是沿著一條直線跳躍稻田

勾笆。 且每次跳躍的距離都相同

。 踩到三顆才構成可能路徑

@@@

不同的青蛙的蛙跳步長不同桥滨, 不同青蛙的蛙跳方向可能不同

-------------------------------------------------------------------------------

可能會有多只青蛙從稻田穿越

青蛙每一條都恰好踩在一顆水稻上窝爪,將這顆水稻拍倒

有些水稻可能被多汁青蛙踐踏,?

農(nóng)民看不到青蛙的行走路線

------------------------------------------------------------------------------

程序要求:

1. 在各條青蛙行走路徑種齐媒, 踩踏水稻最多的那一條上蒲每, 有多少顆水稻被踩踏。

@@@@@@@@@@@@@@@@@@@@@@@@@@

解題思路: 枚舉

1.喻括,枚舉每個被踩的稻子作為行走路徑起點(5000個)

2. 對每個七點邀杏, 枚舉行走方向(5000個)

3. 對每個方向枚舉步長(5000種)

4.枚舉步長后要判斷是否每步都踩到水稻

時間5000* 5000* 5000


#########################

思路:

枚舉路徑上的開始兩點

每條青蛙行走路徑中至少有三顆水稻

假設一只青蛙進入稻田后踩到的前兩顆水稻分別是 (x1, y1)`(x2, y2).那么

? ? 青蛙每一跳在x方向上是dx= x2-x1, dy = y2-y1;

? ? (x1-dx, y1-dx)需要落在稻田之外

? ? 當青蛙踩在水稻(x,y)上時唬血, 下一跳踩踏的水稻時(x+dx望蜡,? ? ? ? ? ?y+dx)

? ? ?將路徑上的最后一顆水稻記為(xk, yk), (xk + dx, yk + dy)需要? ? ? ? ? 落在稻田之外。

----------------------------------------

猜測的辦法需要保證:

? ?每條可能的路徑都能被猜測到:

? ? ? ? 從輸入的水稻中任取兩顆

? ? ? ? ? ? ? ? ? ? --》 作為一只青蛙進入稻田后踩到的前兩顆水稻

? ? ? ? ? ? ? ? ? ? ? ?--》 看能否形成一條穿越稻田的行走路徑


拷恨。脖律。。腕侄。小泉。芦疏。。微姊。酸茴。。柒桑。弊决。。魁淳。。与倡。界逛。。纺座。

猜測過程中需要盡快排除錯誤的答案:

猜測(X1,Y1), (X2,Y2)

? ? 當下列條件之一滿足時息拜, 這個猜測就不成立

.1) 青蛙不能經(jīng)過一跳從稻田外跳到(x1,y1)上

2)按照前兩個點確定的步長, 從第一個點出發(fā)净响, 青蛙最多經(jīng)過(maxstep - 1)步少欺, 就跳到了稻田外面

3)maxstep 是當前已經(jīng)找到的最好答案


-----------------------------

選擇合適的數(shù)據(jù)結構

--關于被踩踏的水稻的坐標

1. struct{

int x, y;

}plants[5000]

2. int plantsRows[5000[, plantscol[5000]


#####################

一個有n個元素的數(shù)組, 每次取兩個元素馋贤, 遍歷所有取法

for(int i = 0;i< n-1; i++)

? ? for(int j = i+1; j<n; j++){

? ? ? ? a[i] =...;

? ? ? ? a[j] = ...;

}

------------------------------------------------------------------------------------------------

#include <stdio.h>

#include <stdlib.h>

#include <algorithm>

using namespace std;

int r,c,n;

struct PLANT{

? ? int x, y;

};

PLANT plants[5001];

PLANT plant;

int searchPath(PLANT secPlant, int dx, int dy);




======MAIN=====

int main()

{

? ? int i, j, dx, dy px,py, steps, max = 2;

scanf("%d %d",&r, &c);

//行數(shù)的列數(shù)赞别, x方向是上下, y方向是左右

scanf("%d", &n);

for(i = 0; i< n; i++)

? ? scanf("%d %d", &Plants[i].x,&Plants[i].y);

//將水稻按x坐標從小到大排序配乓, x相同按y從小到大排序

sort(plants, plants + n);

for(i = 0; i< n-2; i++)

? ? for(j = i+1; j<n-1; j++){

? ? ? ? dx = plants[j].x - plants[i].x;

? ? ? ? dy = plants[j].y - plants[i].y;

? ? ? ? px = plants[i].x - dx;

? ? ? ? py = plants[i].y - dy;

? ? ? ? if(px <= r && px >=1 && py <=c && py >=1)

? ? ? ? ? ? ? ? continue;

? ? ? ? ? ? // 第一點的前的第一點在田里

? ? ? ? ? ? //說明本次選的兩個點導致的x的方向步長不合理(太蟹绿稀)

? ? ? ? ? ? //取下一個點作為第二個點

? ? ? ? if( plants[i].x + (max - 1) * dx > r)

? ? ? ? ? ? break;????????

? ? ? ? ? ? //x 方向過早越界, 說明本次第二個點不成立

? ? ? ? ? ? // 如果換下一個點作為第二個點犹芹, x方向的步長只會更大崎页, ????????????更不成立

? ? ? ? ? ? //因此應該認為本次第一個點必然不成立,選取下一個點作為 ????????????????第一個點

py = plants[i].y + (max-1)* dy;

if(py> c || py < 1)? continue;

steps = searchPath(plants[j], dx, dy);

if(steps > max) max = steps腰埂;

}

if(max == 2) max = 0;

printf("%d\n", max);

}

bool operator< (const PLANT & p1, const PLANT & p2);

{

? ? ? ? if(p1.x == p2.x)

? ? ? ? ? ? return p1.y < p2.y;

? ? ? ? ? return p1.x< p2.x;

}


int searchPath(PLANT secPlant, int dx, int dy)

{

PLANT plant;

int steps;

plant.x = secPlant.x + dx;

plant.y = secPLant.y + dy;

steps = 2;

while (plant.x <=r && plant.x >=1 && plant.y <=c && plant.y )

{

? ? if(!binary_search(plants, plants +n , plant)){

? ? ? ? //每一步都必須踩到水稻里

? ? ? ? steps = 0;

? ? ? ? break;

}

plant.x += dx;

plant.y += dy;

steps ++;

}

return steps;

}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末飒焦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屿笼,更是在濱河造成了極大的恐慌牺荠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁卜,死亡現(xiàn)場離奇詭異志电,居然都是意外死亡,警方通過查閱死者的電腦和手機蛔趴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門挑辆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來例朱,“玉大人,你說我怎么就攤上這事鱼蝉∪鬣停” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵魁亦,是天一觀的道長渔隶。 經(jīng)常有香客問我,道長洁奈,這世上最難降的妖魔是什么间唉? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮利术,結果婚禮上呈野,老公的妹妹穿的比我還像新娘。我一直安慰自己印叁,他們只是感情好被冒,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轮蜕,像睡著了一般昨悼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跃洛,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天率触,我揣著相機與錄音,去河邊找鬼税课。 笑死闲延,一個胖子當著我的面吹牛,可吹牛的內容都是我干的韩玩。 我是一名探鬼主播垒玲,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼找颓!你這毒婦竟也來了合愈?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤击狮,失蹤者是張志新(化名)和其女友劉穎佛析,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體彪蓬,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡寸莫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了档冬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膘茎。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡桃纯,死狀恐怖,靈堂內的尸體忽然破棺而出披坏,到底是詐尸還是另有隱情态坦,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布棒拂,位于F島的核電站伞梯,受9級特大地震影響,放射性物質發(fā)生泄漏帚屉。R本人自食惡果不足惜谜诫,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涮阔。 院中可真熱鬧猜绣,春花似錦、人聲如沸敬特。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伟阔。三九已至,卻和暖如春掰伸,著一層夾襖步出監(jiān)牢的瞬間皱炉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工狮鸭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留合搅,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓歧蕉,卻偏偏與公主長得像灾部,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惯退,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容