1 条题解

  • 0
    @ 2024-12-24 10:06: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<<' ';//输出当前节点	
    }
    
    • 1

    信息

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