下面这份A掉了。
for (int i=0; i<=n; i++)
{
for (int j=0; j<=m; j++)
{
if (!vis2[b[i][j]]) vis2[b[i][j]]=1, n2++;
if (b[i][j]!=b[i+1][j]) a[b[i][j]].push_back(b[i+1][j]), a[b[i+1][j]].push_back(b[i][j]);
if (b[i][j]!=b[i][j+1]) a[b[i][j]].push_back(b[i][j+1]), a[b[i][j+1]].push_back(b[i][j]);
}
}
下面这份WA掉了。
int dx[]={-1, 0, 0, 1}, dy[]={0, -1, 1, 0};
....
for (int i=0; i<=n; i++)
{
for (int j=0; j<=m; j++)
{
if (!vis2[b[i][j]]) vis2[b[i][j]]=1, n2++;
for (int k=0; k<4; k++)
{
int nx=i+dx[k], ny=j+dy[k];
if (nx>=0 && nx<=n+1 && ny>=0 && ny<=m+1)
{
if (b[i][j]!=b[nx][ny])
{
if (vis[b[i][j]][b[nx][ny]]==0) vis[b[i][j]][b[nx][ny]]=1, a[b[i][j]].push_back(b[nx][ny]);
if (vis[b[nx][ny]][b[i][j]]==0) vis[b[nx][ny]][b[i][j]]=1, a[b[nx][ny]].push_back(b[i][j]);
}
}
}
}
}
感觉没区别,都是覆盖了 n, m 的矩阵啊?。