天天写算法(Tarjan缩点)迷宫城堡

地址 点击打开链接
这个题目,就是简单的Tarjan缩点的算法,如果所有的点不能构成一个完整的强连通图,也就是一个强连通分量(不严谨),那么就说明,可以互相连通。

代码:
#include
#include
#include
#include
#include
using namespace std;
#define maxn 10005
#define Max 0x7fffffff
vectormp[maxn]; // 记录每个结点所连接的结点
int stack[maxn*10];  //用于记录访问过的节点
int vis[maxn];  //dfs用,同时tarjan也用,用来记录访问
int low[maxn];  //记录low,这个不明白的话,就得去看tarjan缩点
int dfn[maxn];  //同上
int color[maxn];  //染色,也就是同样的环内颜色是一致的。
int bills[maxn];
int needNum,needBill;
int temp[maxn];
int n,m,cnt,tt,sig,leijia;
int res ;
//主要用于缩点,说染色可能更加形象一些。
void Tarjan(int u)
{
    vis[u]=1;  //将该点设置为已经访问
    low[u]=dfn[u]=cnt++;  //初始化low和dfn  , cnt就是每当一个点是新的,那么就cnt++,累加赋值
    stack[++tt]=u;  //将该点压栈,用数组进行模拟
    //查看该点所连接的所有点
    for(int i=0;i

你可能感兴趣的:(算法)