1 条题解

  • 0
    @ 2024-12-24 9:49:41

    C :

    #include<stdio.h>
    #include<string.h>
    
    int map[21][21] = {0}, vis[21] = {0}, n, flag = 0, m;
    void dfs(int start, int num)
    {
    	int i;	
    	if( num == n - 1 && start == n)
    		flag=1;
    	if(flag==1)
    		return;
    	for(i=2;i<=n;++i)
    		if(vis[i]!=1&&map[start][i]!=0){
    			vis[i]=1;
    			dfs(i,num+1);
    			vis[i]=0;
    		}
    
    }
    
    int main()
    {
    	
    	while(scanf("%d%d", &n, &m) != EOF)
    	{
    		int i, j;
    		memset(map, 0, sizeof(map));
    		memset(vis, 0, sizeof(vis));
    		for( i = 0; i < 21; i++)
    		{
    			vis[i] = 0;
    			for( j = 0; j < 21; j++)
    				map[i][j] = 0;
    		}
    		flag = 0;
    		while(m--)
    		{
    			int a, b;
    			scanf("%d%d", &a, &b);
    			map[a][b] = 1;
    			map[b][a] = 1;
    		}
    		dfs(1, 0);
    		if(flag)
    			printf("1\n");
    		else
    			printf("0\n");
    	}
    	return 0;
    	
    }
    	
    
    

    C++ :

    #include <cstdio>
    #include <vector>
    using namespace std;
    
    int ed, n;
    vector < vector < int > > v;
    
    bool dfs(int x, int s) {
        if (s == ed)
            return x == n - 1;
        for (vector < int >::iterator it = v[x].begin(); it != v[x].end(); ++it)
            if (~s >> *it & 1)
                if (dfs(*it, s | (1 << *it)))
                    return true;
        return false;
    }
    
    int main() {
        int m;
        while (EOF != scanf("%d%d", &n, &m)) {
            v = vector < vector < int > >(n);
            ed = (1 << n) - 1;
            while (m--) {
                int x, y;
                scanf("%d %d", &x, &y);
                --x; --y;
                v[x].push_back(y);
                v[y].push_back(x);
            }
            printf("%d\n", dfs(0, 1));
        }
        return 0;
    }
    
    • 1

    信息

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