输出怎么了?awa

P2731 [USACO3.3] 骑马修栅栏 Riding the Fences

koukis @ 2021-10-16 16:37:16

#include<iostream>
using namespace std;

int g[1005][1005];
int du[1005];
int m;
int n=0;
int bgin=1;

int path[1005];
int length;
void dfs(int v)
{
    for(int i=1;i<=n;i++)
    {
        if(g[v][i]>0)
            g[v][i]--;g[i][v]--;
    }
    path[length++]=v;
}
int main()
{
    cin>>m;//m表示边的个数
    for(int i=1;i<=m;i++)
    {
        int x;
        int y;
        cin>>x>>y;
        if(i==1)
            bgin=x;
        g[x][y]++;
        g[y][x]++;
        du[x]++;
        du[y]++;
        bgin=min(bgin,min(x,y));
        n=max(n,max(x,y));
    } 
    int start=bgin;
    for(int i=bgin;i<=n;i++)
    {
        if(du[i]%2==1)
        {
            start=i;
            break;
        }
    }
    dfs(start);
    for(int i=length-1;i>=0;i--)
    { 
        cout<<path[i]<<endl;
    }
    return 0;
}

by winsun @ 2022-01-26 16:41:33

看看你的代码:

void dfs(int v)
{
    for(int i=1;i<=n;i++)
    {
        if(g[v][i]>0)
            g[v][i]--;g[i][v]--;
    }
    path[length++]=v;
}

所以你不递归它干什么?

并且你这个if语句也有很大的问题,没有花括号。

修改:

void dfs(int v)
{
    for(int i=1;i<=n;i++)
    {
        if(g[v][i]>0)
        {
            g[v][i]--;g[i][v]--;
            dfs(i);
        }
    }
    path[length++]=v;
}

by koukis @ 2022-01-27 11:00:42

@winsun 才看到啊

谢谢啦%%%%


|