程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> poj 2230 Watchcow 歐拉回路

poj 2230 Watchcow 歐拉回路

編輯:關於C++

題意:

給一個圖,求一種從點1出發,經過所有邊恰好兩次回到點1的方案,數據保證有解。

分析:

歐拉回路,改下次數就好了。

代碼:

//poj 2230
//sep9
#include 
#include 
#include 
using namespace std;
const int maxN=10024;
const int maxM=50048;
int head[maxN];
int used[maxM*2];
vector path;
struct Edge
{
	int v,nxt;	
}edge[maxM*2];
int e,n,m;

void dfs(int u)
{
	for(int i=head[u];i!=-1;i=edge[i].nxt){
		int cur=i|1;
		if(used[cur]<2){
			int v=edge[i].v;
			++used[cur];
			dfs(v);
			path.push_back(v);
		}
	}	
}

int main()
{
	scanf("%d%d",&n,&m);
	int i;
	e=0;
	memset(head,-1,sizeof(head));
	memset(used,0,sizeof(used));
	path.clear();
	for(i=1;i<=m;++i){
		int u,v;
		scanf("%d%d",&u,&v);
		edge[e].v=v;edge[e].nxt=head[u];head[u]=e++;
		edge[e].v=u;edge[e].nxt=head[v];head[v]=e++;
	}
	dfs(1);
	reverse(path.begin(),path.end());
	printf("1\n");
	for(i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved