CCF之送货(java)

博客详细介绍了如何使用Java解决CCF(可能是竞赛或实际问题)中的送货问题,涉及核心算法和数据结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题代码(java):

import java.util.Collections;  
import java.util.Comparator;  
import java.util.LinkedList;  
import java.util.Queue;  
import java.util.Scanner;  
import java.util.Stack;  
import java.util.Vector;  
public class Main {  
  
    public static Vector<Integer> []G = new Vector[10010];  
    public static int []d = new int[10010];  
    public static boolean  [][]edge = new  boolean [10010][10010];  
    public static Stack<Integer> S = new Stack<Integer>();  
    public static Queue<Integer> q = new LinkedList<Integer>();  
      
    static int bfs(int s,int n){    
          
          
         boolean []vis = new boolean[10010];  
            q.add(s);  
            vis[s]=true;    
            while(!q.isEmpty()){    
                int u=q.remove();    
                   
                for(int i=0;i<G[u].size();++i){    
                    int v=G[u].get(i);    
                    if(!vis[v]){    
                        vis[v]=true;    
                        q.add(v);    
                        }    
                         
                    }    
                }    
            int x = 0;  
            for(int i = 1;i<n+1;i++)  
            {  
                if(!vis[i])  
                {  
                    x++;  
                }  
                  
            }  
            return x;  
}    
  
      
private static void DFS1(int u,int n) {  
      
    for(int i=0;i<G[u].size();++i){    
        int v=G[u].get(i);    
        if(!edge[u][v]){    
            edge[u][v]=edge[v][u] =true;    
            DFS1(v,n);  
            S.push(v);  
            }    
          
    }  
}  
  
static class comp implements Comparator<Integer>  
{  
  
    @Override  
    public int compare(Integer o1, Integer o2) {  
        // TODO Auto-generated method stub  
        return o1-o2;  
    }  
      
}  
      
      
    public static void main(String[] args) {  
          
        Scanner in  = new Scanner(System.in);  
        int  n = in.nextInt();  
        int m = in.nextInt();  
          
    for(int i = 0;i<n+1;i++)  
    {  
        G[i] = new Vector<Integer>();  
          
    }  
          
        for(int i = 1;i<m+1;i++)  
        {  
              
            int x = in.nextInt();  
            int y = in.nextInt();  
            G[x].add(y);  
            G[y].add(x);  
            d[x]++;  
            d[y]++;  
              
        }  
        in.close();  
          
          
          
          
  
        int number = 0;  
  
        for (int i=1;i<n+1;i++)    
        {  
            if (d[i]%2!=0)   
                number++;  
        }  
  
  
        if (bfs(1,n)==0 && (number==0 ||number==2))  
        {  
            for(int i = 1;i<n+1;i++)  
            {  
                Collections.sort(G[i]);  
              
            }  
  
             DFS1(1,n);  
             System.out.print(1);  
             while(!S.empty())  
             {  
                 System.out.print(" "+S.pop());  
             }  
      
         }  
        else  
             System.out.println(-1);  
          
    }  
  
  
      
  
  
}  
运行超时,算法没学好,希望大神帮忙,50分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值