各位大佬帮忙看一下,我哪里错了?

回复帖子

@南辞北忆 2019-09-11 22:09 回复

include <bits/stdc++.h>

using namespace std;

queue <int>qx;

queue <int>qy;

const int dx[4]={0,0,-1,1};

const int dy[4]={-1,1,0,0};

bool v[1001][1001];

int n,m,ans,i,j,x,y,tx,ty,c,a[1001][1001];

void bfs(int x,int y)

{

v[x][y]=false;
qx.push(x);
qy.push(y);
while(!qx.empty())
{
    int minn=3,minx=1,miny=1;
    for(i=0;i<4;i++)
    {
        tx=qx.front()+dx[i];
        ty=qy.front()+dy[i];
        int s;
        if(a[tx][ty]==a[x][y]) s=0;
        if(a[tx][ty]!=a[x][y]&&v[tx][ty]) s=1;
        if(v[tx][ty]==false) s=2;
        if(tx>0&&ty<0&&tx<=n&&ty<=n&&v[tx][ty]==true&&s<minn)
        {
            minn=s;
            minx=tx;
            miny=ty;
        }
    }
    ans+=minn;
    v[minx][miny]=false;
    qx.push(minx);
    qy.push(miny);
    qx.pop();
    qy.pop(); 
}

}

void input()

{

}

int read()

{

char c=getchar();
int x=0,f=1;
while(c<'0'||c>'9')
{
    if(c=='-') f=-1;
    c=getchar();
}
while(c>='0'&&c<='9')
{
    x=x*10+c-'0';
    c=getchar();
}
return x*f;

}

int main() {

memset(v,0,sizeof(v));
n=read();
m=read();
for(i=1;i<=m;i++)
{
    x=read();
    y=read();
    c=read();
    a[x][y]=a[y][x]=c;
    v[x][y]=v[y][x]=true;
}
bfs(1,1);
printf("%d\n",ans);
return 0;

}

反馈
如果你认为某个帖子有问题,欢迎向洛谷反馈,以帮助更多的同学。



请具体说明理由,以增加反馈的可信度。