王道複試機試(7)

2021-10-05 14:47:23 字數 4318 閱讀 8651

1.bfs寬度優先搜尋

#include

#include

#include

using

namespace std;

void

bfs(

int n)

myqueue.

push

(current*10)

; myqueue.

push

(current*10+

1);}

}int

main()

return0;

}

3的過程應該就是(右為隊首)

11 10;

101 100 11;

111 110 101 100;

1000 1001 111 110 101;

2.dfs深度優先搜尋

#include

#include

#include

#include

using

namespace std;

int direction[8]

[2]=

,,,,

,,,}

;const

int maxn=30;

bool visit[maxn]

[maxn]

;bool

dfs(

int x,

int y,

int step,string answer,

int p,

int q)

for(

int i=

0;i<8;

++i)

visit[nx]

[ny]

=true

;char col= ny+

'a';

char row= nx+

'1';if(

dfs(nx,ny,step+

1,answer+col+row,p,q)

)//此時判斷的下一步是否能走

visit[nx]

[ny]

=false

;//此時不能走,所以我們還沒有訪問過nxny。

}return

false;}

intmain()

return0;

}

#include

#include

#include

#include

using

namespace std;

const

int maxn=25;

int sticks[maxn]

;bool visit[maxn]

;bool

dfs(

int sum,

int num,

int side,

int m)

for(

int i=

0;i) visit[i]

=true;if

(sum+sticks[i]

==side)

else

visit[i]

=false;}

return

false;}

intmain()

int side=length/4;

memset

(visit,

false

,sizeof

(visit));

if(dfs(0,

0,side,m)

)printf

("yes\n");

else

printf

("no\n");

}return0;

}

但這樣可能找到之後資源以及耗盡,所以最好剪枝。

#include

#include

#include

#include

using

namespace std;

const

int maxn=25;

int sticks[maxn]

;bool visit[maxn]

;bool

dfs(

int sum,

int num,

int position,

int side,

int m)

int sample =0;

for(

int i=position;i

) visit[i]

=true;if

(sum+sticks[i]

==side)

else

visit[i]

=false;}

return

false;}

bool

compare

(int x,

int y)

intmain()

if(length%4!=

0)// 邊長不為整數肯定不行

int side=length/4;

memset

(visit,

false

,sizeof

(visit));

sort

(sticks,sticks+m,compare);if

(sticks[0]

>side)

// 最大的都大於了邊長肯定不行 if(

dfs(0,

0,0,side,m)

)printf

("yes\n");

else

printf

("no\n");

}return0;

}

queue的應用

#include

#include

#include

#include

using

namespace std;

struct complex

bool

operator

<

(complex c)

const

else}}

;int

main()

else

}else}}

return0;

}

哈弗曼樹再書上是那種,利用求每個葉子節點的權值*高度 的和來求出帶權路徑長度。同樣我們可以用葉子節點的雙親所求的權值(我不知道是不是這樣說啊。。),然後利用那幾個點的權值求和也可以得到同樣的值。

結果均為37.

#include

#include

#include

using

namespace std;

intmain()

int answer=0;

while

(mypriorityqueue.

size()

>1)

printf

("%d"

,answer);}

return0;

}

雜湊表應用map:紅黑樹的查詢,插入,刪除,logn的複雜度。

unordered_map:hash table,查詢,插入,刪除,log1的複雜度

#include

#include

#include

using

namespace std;

mapint>mymap;

intmain()

it=mymap.

find

("bob");

if(it!=mymap.

end())

else

return0;

}

#include

#include

#include

#include

using

namespace std;

map student;

intmain()

int m;

scanf

("%d"

,&m)

;while

(m--

)else

}return0;

}

王道複試機試(2)

學號姓名排名 用sort函式 include include include using namespace std struct student student arr 100 bool compare student x,student y else return x.score int mai...

2018 BIT複試機試

1 輸入乙個只含有英文本母的字串,輸出最大回文子串的長度及此長度回文子串的個數 回文不區分大小寫 樣例 輸入abaab 最大回文子串為baab 輸出4 1 輸入abcbbb 最大回文子串為bcb和bbb 輸出 3 2 實際測試樣例 輸入 a b 輸出 1 2 輸入 abcbb 輸出 3 1 輸入 a...

北航複試機試之素數

輸入乙個整數n 2 n 10000 要求輸出所有從1到這個整數之間 不包括1和這個整數 個位為1的素數,如果沒有則輸出 1。輸入有多組資料。每組一行,輸入n。輸出所有從1到這個整數之間 不包括1和這個整數 個位為1的素數 素數之間用空格隔開,最後乙個素數後面沒有空格 如果沒有則輸出 1。示例1 10...