poj 1300 zoj 1395 door man 尤拉迴路的判定
輸入比較麻煩,其它感覺就是好水哦
view code
#include#includepoj 1386 zoj 2016 play on wordsintmain()
}gets(buf);
int odd=0,even=0
;
for(i=0;i)
if(odd==0 && m == 0 || odd==2 && (door[m]%2) && (door[0]%2) &&m)
printf(
"yes %d\n
",doors);
else puts("no"
); }}}
先判斷是否滿足尤拉迴路的條件,用到並查集來判斷是否連通(即是否只有一課樹,題目要求一棵樹)
view code
#include#include下面乙個是完全自己寫的#define inf 100000000
#define maxn 100001
int od[26],id[26];//
出度,入度
int vis[26
];int f[26
];int
n;char word[1001
];struct
node
edge[maxn];
int find(int
x)
return
rt;}
void merge(int x, int
y)
else
}bool
connect()
int tmp = -1
;
for(i=0;i<26;i++)
}if(i==26)return
true
;
return
false;}
intmain()
bool ok = 1
;
int x = 0
;
int y = 0
;
for(i=0;i<26;i++)
if(od[i]==0 && id[i] == 0)
if(id[i] - od[i] == 1
)
}if(od[i] - id[i] == 1
) }}
if(x != y)ok=0
;
if(!connect())ok=0
;
if(ok)puts("
ordering is possible.");
else puts("
the door cannot be opened.");
}return0;
}
view code
#include#include#define maxn 100002
int fa[26
];bool vis[26
];int id[26],od[26
];int find(int
x)
return
rt;}
void merge(int x, int
y)int
main()
int tmp = -1
;
bool ok = true
;
for(i=0;i<26;i++)}}
if(!ok)
int x=0,y=0
;
for(i=0;i<26;i++)
if(id[i]-od[i]>=2||od[i]-id[i]>=2)
if(id[i]-od[i]==1
)
}if(od[i]-id[i]==1
) }}
}
//printf("%d %d\n",id['m'-'a'],od['m'-'a']);
if(ok)printf("
ordering is possible.\n");
else printf("
the door cannot be opened.\n");
}return0;
}
尤拉迴路 輸出尤拉迴路的路徑
有向or無向均可,重邊 step1 從u開始,找到與他相連的v,放入棧,刪除 u,v 這條邊,然後從v開始 step2 當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。最後記得把棧裡的點放到path中。path倒序輸出 需要先找到起點 鄰接表法,適合稀疏圖 incl...
學習筆記 尤拉迴路
有兩個概念 尤拉路徑 在乙個圖中,由i點出發,將每個邊遍歷一次最終到達j點的一條路徑。尤拉迴路 i j時的尤拉路徑。我們需要確定乙個圖是否存在尤拉路徑,並找到這條路徑 那就很好做了qwq 可以用並查集判斷圖的聯通性 然後對於有向圖與無向圖,使用上述性質進行判斷 對於無向圖的尤拉迴路,任意一點都可以作...
尤拉迴路學習筆記
尤拉道路 概念 從無向圖中的乙個結點出發走出一條道路,每條邊恰好經過一次。這樣的路線稱為尤拉道路,也可形象的稱為 一筆畫 性質 除了起點和終點以外,其他點的 進出 次數應該相等。換句話說,除了起點和終點以外,其他點的度數應該是偶數 這也就引出了尤拉道路的充分條件 如果乙個無向圖是連通的,且最多只有兩...