有必勝策略的吧。。狀態(tài)空間的上限是3^9也就是不到20000實(shí)際上沒有這么多。所以直接采用BFS標(biāo)記會比較好。算法的話就是填充表,把表(九個(gè)格子)填為必勝、必?cái)。簞?,開始的時(shí)候全部標(biāo)為必?cái)?,再從勝狀態(tài)開始向回BFS(或者DFS也可以),己勝狀態(tài)向回標(biāo)的一定是敗狀態(tài),必勝狀態(tài)的上一狀態(tài)為必?cái)B(tài),必?cái)B(tài)的上一狀態(tài)可能是必?cái)』蛘弑貏伲ㄟ@就是因?yàn)檫@家伙走錯(cuò)棋了所以要輸?。?/p>
創(chuàng)新互聯(lián)公司是一家專業(yè)提供虹口企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、網(wǎng)站制作、HTML5、小程序制作等業(yè)務(wù)。10年已為虹口眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
我的習(xí)慣。不寫代碼。沒有意思。
方法1:
如果存在回路,則必存在一個(gè)子圖,是一個(gè)環(huán)路。環(huán)路中所有頂點(diǎn)的度=2。
n算法:
第一步:刪除所有度=1的頂點(diǎn)及相關(guān)的邊,并將另外與這些邊相關(guān)的其它頂點(diǎn)的度減一。
第二步:將度數(shù)變?yōu)?的頂點(diǎn)排入隊(duì)列,并從該隊(duì)列中取出一個(gè)頂點(diǎn)重復(fù)步驟一。
如果最后還有未刪除頂點(diǎn),則存在環(huán),否則沒有環(huán)。
n算法分析:
由于有m條邊,n個(gè)頂點(diǎn)。
i)如果m=n,則根據(jù)圖論知識可直接判斷存在環(huán)路。(證明:如果沒有環(huán)路,則該圖必然是k棵樹 k=1。根據(jù)樹的性質(zhì),邊的數(shù)目m = n-k。k=1,所以:mn)
ii)如果mn 則按照上面的算法每刪除一個(gè)度為0的頂點(diǎn)操作一次(最多n次),或每刪除一個(gè)度為1的頂點(diǎn)(同時(shí)刪一條邊)操作一次(最多m次)。這兩種操作的總數(shù)不會超過m+n。由于mn,所以算法復(fù)雜度為O(n)。
java.lang.ArrayIndexOutOfBoundsException: -1
int[][]?next={{0,1},{1,0},{0,-1},{-1,0}};
int?tx?=?0,ty?=?0;
for(int?i=0;i4;i++){
tx=x+next[i][0];
ty=y+next[i][1];
if(tx1||txm||ty1||tyn){
continue;
}
}if(a[tx][ty]==0book[tx][ty]==0){?//可能會出現(xiàn)數(shù)組越界
閑著沒事,給你寫了一個(gè)一個(gè)DFS算法,可以枚舉(a1, a2… ak),剩下的太簡單,你自己寫著玩吧。。。
import?java.util.ArrayList;
public?class?DFS?{
public?static?void?main(String[]?args)?{
DFS?dfs=new?DFS();
dfs.dfs(1);
}
int?sum=0;?
int?index=5;
ArrayListIntegerlist=new?ArrayListInteger();
public?void?dfs(int?i)
{
if(iindex)
{
sum++;
System.out.println("this?is?the?"+sum);
for(Integer?integer:this.list)
{
System.out.print(integer+"?");
}
System.out.println();
return;
}
for(int?j=0;j=1;j++)
{
list.add(j);
this.dfs(i+1);
list.remove(list.size()-1);
}
}
}
好好的看一下就知道為什么list的長度與count 相同時(shí),總是出現(xiàn)死循環(huán) 。
你在int[] a=new int[count]; 這一步操作時(shí),數(shù)組a中的數(shù)據(jù)全部默認(rèn)為0,而int rs=ran.nextInt(list.size()); 返回的值是0到list.size()-1的數(shù)。當(dāng)list的長度與count 相同時(shí),在產(chǎn)生最后一個(gè)隨機(jī)數(shù)時(shí),只能產(chǎn)生0,可是0在數(shù)組a中又存在了,所以就死循環(huán)了。
編程時(shí),多注意邊界問題。
#includestdio.h
#includestring.h
bool g[201][201];
int n,m,ans;
bool b[201];
int link[201];
bool init()
{
int _x,_y;
memset(g,0,sizeof(g));
memset(link,0,sizeof(link));
ans=0;
if(scanf("%d%d",n,m)==EOF)return false;
for(int i=1;i=n;i++)
{
scanf("%d",_x);
for(int j=0;j_x;j++)
{
scanf("%d",_y);
g[ i ][_y]=true;
}
}
return true;
}
bool find(int a)
{
for(int i=1;i=m;i++)
{
if(g[a][ i ]==1!b[ i ])
{
b[ i ]=true;
if(link[ i ]==0||find(link[ i ]))
{
link[ i ]=a;
return true;
}
}
}
return false;
}
int main()
{
while(init())
{
for(int i=1;i=n;i++)
{
memset(b,0,sizeof(b));
if(find(i))ans++;
}
printf("%d\n",ans);
}
}
Pascal:
Program matching;
Const
max = 1000;
Var
map : array [1..max, 1..max] of boolean; {鄰接矩陣}
match: array [1..max] of integer; {記錄當(dāng)前連接方式}
chk : array [1..max] of boolean; {記錄是否遍歷過,防止死循環(huán)}
m, n, i, t1, t2, ans,k: integer;
Function dfs(p: integer): boolean;
var
i, t: integer;
begin
for i:=1 to k do
if map[p, i] and not chk[ i ] then
begin
chk[ i ] := true;
if (match[ i ] = 0) or dfs(match[ i ]) then {沒有被連過 或 尋找到增廣路}
begin
match[ i ] := p;
exit(true);
end;{if}
end;{for}
exit(false);
end;{function}
begin{main}
readln(n, m); {N 為二分圖左側(cè)點(diǎn)數(shù) M為可連接的邊總數(shù)}
fillchar(map, sizeof(map), 0);
k:=0;
for i:=1 to m do{initalize}
begin
readln(t1, t2);
map[t1, t2] := true;
if kt2 then k:=t2;
end;{for}
fillchar(match, sizeof(match), 0);
ans := 0;
for i:=1 to n do
begin
fillchar(chk, sizeof(chk), 0);
if dfs(i) then inc(ans);
end;
writeln(ans);
for i:=1 to 1000 do
if match[ i ] 0 then
writeln(match[ i ], '--', i);
end.
網(wǎng)頁標(biāo)題:dfs算法java代碼 dfs代碼實(shí)現(xiàn)
URL網(wǎng)址:http://m.rwnh.cn/article8/doohiip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站內(nèi)鏈、定制網(wǎng)站、建站公司、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)