ACM新手DAY 4 DFS及其應用

2021-09-25 08:31:23 字數 3450 閱讀 3301

題目:定義乙個二維陣列:

int maze[5][5] = ;

它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。

#include

#include

#include

using namespace std;

intm(5

),n(

5);int vis[20]

[20];

//標記陣列,去掉已經經過的地點

int f[4]

[2]=

,,,}

;//方向陣列,用在選擇方向時的座標處理

int a[20]

[20];

vector

int,

int>

> q, qq;

//和結構體有些類似,標頭檔案;第乙個q是佇列,第二個用來儲存最短路徑的佇列

intxb(0

),yb(

0),xe

(4),

ye(4)

;//起始座標與終點座標

intminn

(100);

bool judge

(int x1,

int y1)

//判斷下乙個方向的座標是否合法

void

dfs(

int x,

int y,

int ss)

//!!!這裡的ss是對每一條路徑長度記錄用的

return;}

for(

int i=

0; i<

4; i++)}

}int

main()

return0;

}

題目:馬在中國象棋以日字形規則移動。編寫一段程式,給定n*m大小的棋盤,以及馬的初始位置(x,y),要求不能重複經過棋盤上的同乙個點,計算馬可以有多少途徑遍歷棋盤上的所有點。

int f[8]

[2]=

,,,,

,,,}

;

void

dfs(

int a,

int b,

int ss)

//ss依舊記錄路徑長度(或者說座標點數量)

map[a]

[b]=0;

}return

;}

題目:環由n個圓組成,如圖所示。將自然數1,2,…,n分別放入每個圓中,兩個相鄰圓中的數字之和應為素數。

;//直接prime把數字弄成01組,減少判斷函式的呼叫

bool isprime

(int x)

return true;

}void

dfs(

int x)

else}}

return;}

intmain()

return0;

}

題目:取相同長度的棍子若干並隨意切割,直到所有部分最多變成50個單位。現在想把棍子歸還原來的狀態,但是不知道原來有多少棍子和原來多長。計算這些棒可能的最小原始長度。

#include

#include

#include

using namespace std;

int n;

int maxx, sum;

int temp;

int a[

100]

;int vis[

100]

;int

dfs(

int cnt,

int index,

int ss)

else

if(ss + a[i]

== temp)

//做成乙個temp就要重新組了

if(ss ==0)

//這一根都沒用上自然結束了

return0;

}return0;

}int

cmp(

int a,

int b)

intmain()

sort

(a , a + n , cmp)

;//之後,a[i]都是降序的了,從大的開始找也是為了減少時間

for(

int i = n; i >

0; i--

)//從n開始嘗試,因為n越大,單個小棒越小}}

}return0;

}

題目:迷宮是乙個大小為n×m的矩形。迷宮中有一扇門。在開始時,門被關閉,它將在第t秒開啟一小段時間(不到1秒)。因此,小狗必須在第t秒才到達門口。在每一秒中,他可以將乙個塊移動到上,下,左和右相鄰塊之一。一旦他進入乙個區塊,這個區塊的地面將開始下沉並在下一秒消失。他不能在乙個街區停留一秒以上,也不能進入乙個被訪問的街區。判斷小狗能否活下來?

#include

#include

using namespace std;

int n, m;

int t;

int xe, ye, xd, yd;

bool flag = false;

char a[8]

[8];

int vis[8]

[8];

int nex[4]

[2]=

,,,}

;void

dfs(

int x,

int y,

int cnt)

for(

int i =

0; i <

4; i++)}

}return;}

intmain()

if(a[i]

[j]==

's')

} vis[xd]

[yd]=1

; flag = false;

dfs(xd, yd,0)

;if(flag)

else

cout <<

"no"

<< endl;

}}

ACM新手DAY 26 計算幾何

題目 給出多個區間和多個點,計算每個區間包括的點的數目 include include include using namespace std const int n 5000 10 int sum n struct point tmp struct line line n double judge...

ACM新手DAY 2 模擬和貪心

include include using namespace std int n,m cin n m for i 0 i for j 0 j 2 j 這裡加了字元 為了之後與命令的ip位址字串好匹配 for i 0 i for j 0 j 2 j cin ss i j string bl stri...

ACM新手DAY 6 最短路徑

題目 兩個點之間可能有多條路線,求出從起點到終點的最短耗時 include include using namespace std define maxn 999999 int n,m,g 110 110 dis 110 bool visit 110 int dijkstra int src,int...