1 条题解

  • 0
    @ 2024-12-24 10:06:05

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    struct Edge{
        int u,
            v;
    }edge[1003];
    vector<int> Vec[1003];
    int vis[1003];
    int from, to;
    bool Go = false;
    void dfs(int n, int u)
    {
        vis[n] = 1;
        if(n == to)Go = true;
        if(Go == true)return;
        for(int i=0; i<Vec[n].size(); i++){
            if((vis[Vec[n][i]] == 0) && (Vec[n][i] == to || Vec[n][i] != u)){//下一个点没被访问过和下一个点。。
                dfs(Vec[n][i], u);
                vis[Vec[n][i]] = 0;
            }
        }
    }
    int main()
    {
        int i, j, n, m, u, v;
        int count;
        cin>> n >> m;
        for(i=1; i<=m; i++){
            cin>> u >> v;
            Vec[u].push_back(v);
            Vec[v].push_back(u);
        }
        cin>> from >> to;
        count = 0;
        dfs(from, -1);
        if(Go == false){
            cout<<"-1\n";
        }
        else
            for(i=1; i<=m; i++){
                Go = false;
                memset(vis, 0, sizeof(vis));
                dfs(from, i);
                if(Go == false)count++;
            }
        cout<<count<<endl;
        return 0;
    }
    
    

    Java :

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main {
    	public static ArrayList ff;
    	public static int flag;
    	public static int[] f;
    	public static ArrayList c;
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		while(sc.hasNext()) {
    			int n=sc.nextInt();
    			int m=sc.nextInt();
    			ArrayList<Integer>[] a=new ArrayList[n+1];
    			for(int i=0;i<n+1;i++) {
    				a[i]=new ArrayList();
    			}
                f=new int[n+1];
    			ff=new ArrayList();
    			for(int i=0;i<m;i++) {
    				int x=sc.nextInt();
    				int y=sc.nextInt();
    				a[x].add(y);
    				a[y].add(x);
    
    			}
    			c=new ArrayList();
    			int s=0;
    			int begin=sc.nextInt();
    			int end =sc.nextInt();
    			c.add(begin);
    			f[begin]=1;
    			fds(a,begin,end,-1);
    
    			if(flag!=0) {
    				c.clear();
    				for(int k=1;k<f.length;k++) {
    					f[k]=0;
    				}
    				for(int i=0;i<ff.size();i++) {
    					flag=0;
    					fds(a,begin,end,(int) ff.get(i));
    					if(flag==0) {
    						s++;
    						}
    				}
    			}else {
    				s=-1;
    			}
    			flag=0;
    			ff.clear();
    			c.clear();
    			for(int k=1;k<f.length;k++) {
    				f[k]=0;
    			}
    			System.out.println(s);
    			
    		}
    	}
    	public static void fds (ArrayList[] a,int d,int end,int p) {
    		for(int i=0;i<a[d].size();i++) {
    			if(f[(int)a[d].get(i)]==0&&(int)a[d].get(i)!=p) {
    				if((int)a[d].get(i)==end) {
    					if(p==-1) {
    
    					for(int k=1;k<c.size();k++) {
    						ff.add(c.get(k));
    					}
    					}
    					flag=2;
    					return;
    				}
    			
    
    				f[(int)a[d].get(i)]=1;
    				int e=(int)a[d].get(i);
    				c.add(a[d].get(i));
    				fds(a,e,end,p);
    				f[(int)a[d].get(i)]=0;
    				if(flag==2) {
    					break;
    					}c.remove(c.size()-1);
    			
    				
    			}
    		}
    	}
    }
    
    • 1

    信息

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