void articulation(int v)
{
    visit[v]=true;
    predfn++;
    discover[v]=Back[v]=predfn;
    for(int i=0; i<Graph[v].size(); i++)
    {
        int w=Graph[v][i];
        if(!visit[w])
        {
            articulation(w);
            Back[v]=min(Back[v],Back[w]);
            if(Back[w]>=discover[v]&&v!=source)
            {
                arti[v]=true;
            }
            else if(v==source)
            {
                child_of_root++;
                if(child_of_root==2)
                {
                    arti[v]=true;
                }
            }
        }
        else
        {
            Back[v]=min(Back[v],discover[w]);
        }
    }
}
Пример #2
0
void main(void)
{
	clrscr();
	freopen("arti.in", "r", stdin);
	int i, j;
	read();
	root=1 ;
	printf("\n");
	articulation(root);
	printart(root);
}
Пример #3
0
std::vector<NamedAttack> get_attacks(std::string file) {
    std::string line;
    std::ifstream fha;
    std::vector<NamedAttack> articulations;
    fha.open (file, std::ios::in);
    if (fha.is_open()) {
        while (std::getline(fha, line)) {
            articulations.push_back(articulation(line));
        }
        fha.close();
        
        return articulations;
    }
    else {
        std::cout << "ERROR UNABLE TO OPEN FILE-open_attack" << std::endl;
        return articulations;
    }
}
Пример #4
0
int main()
{

    graphm g;
    g=graphm_vide(2);
    sommet s1=0,s2=1,s3=2;
    //g=ajout_arete(s1,s1,g);
    g=ajout_arete(s1,s2,g);
    g=ajout_arete(s2,s3,g);
    g=ajout_arete(s1,s3,g);
    print_graphm(g);
    //g=ajout_sommet(3,g);
    //g=ajout_sommet(4,g);
    //g=ajout_sommet(5,g);
    //g=ajout_sommet(6,g);
    //printf("ffffffff%d\n",g.n);
    //g=ajout_arete(5,6,g);
    //g=ajout_arete(3,4,g);
    //print_graphm(g);
    //g=ajout_arete(3,s2,g);
    print_graphm(g);
    //printf("%d",degre(1,g));
    //adjacents(1,g);
    //g=supp_sommet(s1,g);
    //print_graphm(g);
    //g=supp_arete(s2,3,g);
    //print_graphm(g);
    //profondeur2(g);
    //print_coulors(g);
    //print_graphm(g);
    g=connexe(g);
    print_coulors(g);
    //printf(" %d \n",articulation(g));

    //printf(" %d \n",articulation(g));
    articulation(g);
    //print_graphm(g);
    //print_coulors(g);



    return 0;

}
int main ()
{
	int a[100][100];
	int n;
	scanf ("%d", &n);
	int i, j;
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= n; j++) {
			scanf ("%d", &a[i][j]);
		}
	}
	int visit[100];
	for (i = 1; i <= n; i++) {
		visit[i] = 1;
	}
	articulation (a, visit, n);
	printf ("\n");
	return 0;
}
Пример #6
0
int main() {
	int i;
	static char s[MAXS+3];
	while(1) {
		fgets(s,MAXS,stdin);
		sscanf(s,"%d",&n);
		if(!n) break;
		memset(g,0,sizeof(g));
		ne=0;
		while(1) {
			fgets(s,MAXS,stdin);
			an=sscanf(s,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
				&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9],
				&a[10],&a[11],&a[12],&a[13],&a[14],&a[15],&a[16],&a[17],&a[18],&a[19],
				&a[20],&a[21],&a[22],&a[23],&a[24],&a[25],&a[26],&a[27],&a[28],&a[29],
				&a[30],&a[31],&a[32],&a[33],&a[34],&a[35],&a[36],&a[37],&a[38],&a[39],
				&a[40],&a[41],&a[42],&a[43],&a[44],&a[45],&a[46],&a[47],&a[48],&a[49],
				&a[50],&a[51],&a[52],&a[53],&a[54],&a[55],&a[56],&a[57],&a[58],&a[59],
				&a[60],&a[61],&a[62],&a[63],&a[64],&a[65],&a[66],&a[67],&a[68],&a[69],
				&a[70],&a[71],&a[72],&a[73],&a[74],&a[75],&a[76],&a[77],&a[78],&a[79],
				&a[80],&a[81],&a[82],&a[83],&a[84],&a[85],&a[86],&a[87],&a[88],&a[89],
				&a[90],&a[91],&a[92],&a[93],&a[94],&a[95],&a[96],&a[97],&a[98],&a[99],
				&a[100],&a[101],&a[102],&a[103],&a[104],&a[105],&a[106],&a[107],&a[108],&a[109]);
			if(an==1 && !a[0]) break;
			a[0]--;
			for(i=1;i<an;i++) {
				a[i]--;
				if(!g[a[0]][a[i]]) {
					g[a[0]][a[i]]=g[a[i]][a[0]]=1;
					from[ne]=a[0]; to[ne++]=a[i]; 
					from[ne]=a[i]; to[ne++]=a[0]; 
				}
			}
		}
		countingsort();
		articulation(0);
		printf("%d\n",acn);
	}
	return 0;
}
Пример #7
0
void articulation(int u)
{
	int v;
	edge e;
	int x;
	status[u]=visiting;
	discover[u]=finish[u]=++time;
	//for(v=1; v<=n; v++)
		//if(adj[u][v]==adjacent)
	x=NodeHead[u];
	while(x!=NIL)
		{
			v=EdgeList[x].dst;
			for(v=1; v<=n; v++){
			if(parent[u]!=v && discover[v]<discover[u])
				{
					e.u=u;
					e.v=v;
					push(e);
				}
			if(status[v]==notvisited)
				{
					parent[v]=u;
					articulation(v);
					if(finish[v]>=discover[u])
						{
							point[u]+=1;
							getcomp(u, v);
						}
					finish[u]=min(finish[u], finish[v]);
				}
			else
				if(parent[u]!=v)
		x=EdgeList[x].next;			finish[u]=min(finish[u], discover[v]);
		}}
	status[u]=visited;
}