1124. Mosaic(dfs)

1124

需要想那么一点点吧 一个连通块中肯定不需要伸进手不拿的情况 不是一个肯定会需要这种情况 

然后注意一点 sum=0的时候 就输出0就可以了 不要再减一了

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
using namespace std;
vector<int>ed[];
int a[][],vis[],de[];
void dfs(int u)
{
int i;
for(i = ; i < (int)ed[u].size() ; i++)
{
int v = ed[u][i];
if(!vis[v])
{
vis[v] = ;
dfs(v);
}
}
}
int main()
{
int i,j,n,m;
int num=;
scanf("%d%d",&n,&m);
for(i = ; i <= n ;i++)
for(j = ; j <= m ; j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]!=i)
{
num++;
de[i]++;
ed[i].push_back(a[i][j]);
ed[a[i][j]].push_back(i);
}
} int sum=;
for(i = ; i <= n ; i++)
{
if(de[i]&&!vis[i])
{
sum++;
vis[i] = ;
dfs(i);
}
}
if(sum==)
printf("0\n");
else
printf("%d\n",sum-+num);
return ;
}
上一篇:两个和尚抬水有水喝,三个和尚抬水没水喝------IT项目管理之组织架构


下一篇:SpringMVC 拦截器使用说明