1 条题解

  • 0
    @ 2025-2-14 21:30:05

    C :

    #include<stdio.h>
    #include<string.h>
    
    int a[105][105]; 
    int du[105];
    int n,e,start,df;
    void init();
    void dfs(int);
    
    int main()
    {
    	init();
    	dfs(start);
    	return 0;
    }
    
    void dfs(int x)
    {
    		for(int i=1;i<=n;i++)
    	{
    		if(a[x][i]==1)
    		{
    			a[x][i]=a[i][x]=0;
    			dfs(i); 
    		}
    	}
    	printf("%d ",x);
    }
    
    void init()
    {
    	memset(a,0,sizeof(a));
    	memset(du,0,sizeof(du));
    	scanf("%d%d",&n,&e);
    	int x,y;
    	for(int i=1;i<=e;i++)
    	{
    		scanf("%d%d",&x,&y);
    		a[x][y]=a[y][x]=1;
    		du[x]++; 
    		du[y]++;
    	}
    	start=1;
    	for(int i=1;i<=n;i++)
    	  if(du[i]%2==1)  start=i;
    	 }
    
    
    

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio> 
    using namespace std;
    int a[100][100];//邻接矩阵存储节点关系 
    int du[100];//记录每个节点的度数 
    int n,e,start;
    void init();
    void dfs(int);
    int main()
    {
    	//freopen("euler1.in","r",stdin);
    	//freopen("euler1.out","w",stdout);
    	init();
    	//cout<<"start="<<start<<endl;
    	dfs(start);
    	return 0;
    }
    void init()
    {
    	memset(a,0,sizeof(a));
    	memset(du,0,sizeof(du));
    	cin>>n>>e;
    	int x,y;
    	for(int i=1;i<=e;i++)
    	{
    		cin>>x>>y;
    		a[x][y]=a[y][x]=1;//无向图 
    		du[x]++;//x节点度数++ 
    		du[y]++;//y节点度数++		
    	}
    	start=1;//遍历所有节点找到第一个奇点,没奇点则为1 
    	for(int i=1;i<=n;i++)
    	  if(du[i]%2==1)
    	  {
    	  	start=i;
    	  	//break;
    	  }
    }
    void dfs(int x)
    {	 	
    	for(int i=1;i<=n;i++)
    	{
    		if(a[x][i]==1)//找到下一个邻接点 
    		{
    			a[x][i]=a[i][x]=0;//两条边均设为0,不会重复访问 
    			dfs(i);//以邻接点开始遍历 
    		}
    	}
    	cout<<x<<' ';//输出当前节点	
    }
    

    Pascal :

    program acm21184;
    const maxn=100;
    type node=record
              u,v,next:longint;
              end;
    var
      d:array[1..maxn] of longint;
      num,i,j,k,n,e,u,v,t:longint;
      graph:array[1..maxn,1..maxn] of longint;
      head:array[1..maxn] of longint;
      vis:array[1..maxn] of boolean;
    procedure dfs(x:longint);
    var
      i:longint;
    begin
    
       for i:=1 to n do
         if (graph[x,i]>0) then
           begin
             graph[x,i]:=0;
             graph[i,x]:=0;
             dfs(i);
           end;
         if k=0 then
       begin
         write(x); k:=k+1;
       end
      else write(' ',x);
    end;
    procedure init;
    var i:longint;
    begin
      fillchar(d,sizeof(d),0);
      fillchar(graph,sizeof(graph),0);
      readln(n,e);
      for i:=1 to e do
       begin
         readln(u,v);
         graph[u,v]:=1;
         graph[v,u]:=1;
         inc(d[u]);
         inc(d[v]);
       end;
      num:=1;
      for i:=1 to n do
       if d[i] mod 2<>0 then
          num:=i;
    end;
    begin
      fillchar(head,sizeof(head),0);
      t:=0;
      init;
      k:=0;
      dfs(num);
    end.
    
    
    • 1

    信息

    ID
    935
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者