Beispiel #1
0
void solve() {
	int i,j,k,change;
	char s[MAXV+1];
	scanf("%d",&n);
	if(n>MAXV) printf("increase MAXV to %d and recompile\n",n),exit(1);
	for(ne=i=0;i<n;i++) {
		scanf("%s",s);
		for(j=0;j<n;j++) if(j!=i && s[j]=='1') from[ne]=i,to[ne++]=j;
	}
	countingsort();
	n2=scc();
	/* find component graph */
	for(i=0;i<n;i++) for(j=0;j<n;j++) g2[i][j]=0;
	for(i=0;i<ne;i++) g2[con[to[i]]][con[from[i]]]=1;
	/* turn it into a tree by un-transitivizing it */
	do {
		change=0;
		for(k=0;k<n2;k++) for(i=0;i<n2;i++) if(k!=i && g2[i][k]) for(j=0;j<n2;j++) if(k!=j && i!=j) {
			if(g2[i][j] && g2[i][k] && g2[k][j]) g2[i][j]=0,change=1;
		}
	} while(change);
	/* find representative */
	for(i=0;i<n;i++) rep[con[i]]=i;
	/* output tree edges */
	for(on=i=0;i<n2;i++) for(j=0;j<n2;j++) if(i!=j && g2[i][j]) outa[on]=rep[i]+1,outb[on++]=rep[j]+1;
	/* output cycle in each component */
	for(i=0;i<n2;i++) {
		for(cn=j=0;j<n;j++) if(i==con[j]) sykkel[cn++]=j;
		if(cn>1) for(j=0;j<cn;j++) outa[on]=sykkel[j]+1,outb[on++]=sykkel[(j+1)%cn]+1;
	}
	printf("%d\n",on);
	for(i=0;i<on;i++) printf("%d %d\n",outa[i],outb[i]);
}
Beispiel #2
0
/**************************************************
*   Test sort by keefo 2008.03.16
**************************************************/
int main(int argc, char* argv[])
{
    int a[10] = {2, 3, 1, 5, 8, 7, 6};
    quicksort(a, 0, 6);
    mergesort(a, 0, 6);
    countingsort(a, 7);
    getchar();
    return 0;
}
int main(int argc, char const* argv[])
{
    int *temp;
    for(int i = 1; i <= 71; i += 5){
        temp = getRandomArray(i, -20, 20);
        printarray(temp, i);
        countingsort(temp, i);
        printarray(temp, i);
        delete [] temp;
    }

    return 0;
}
Beispiel #4
0
/* for vertex i, id of component is in con[i] */
int scc() {
	static int dfsres[MAXV];
	int i,t,c=0;
	memset(vis,0,n);
	for(resn=i=0;i<n;i++) if(!vis[i]) dfsvisit(i,-1);
	/* transpose graph */
	memcpy(dfsres,res,n*sizeof(int));
	for(i=0;i<ne;i++) t=from[i],from[i]=to[i],to[i]=t;
	countingsort();
	memset(vis,0,n);
	for(resn=0,i=n-1;i>=0;i--) if(!vis[dfsres[i]]) dfsvisit(dfsres[i],c++);
	return c;
}
Beispiel #5
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;
}
Beispiel #6
0
int main()
{
int size,i,max=-10;
printf("enter the size of array\n");
scanf("%d",&size);
int numbers[size];
int extra[size];

for (i = 0; i < size; ++i)
{
	scanf("%d",&numbers[i]);
	if(numbers[i]>max)
		max = numbers[i];
}
printf("max is %d\n",max);
countingsort(numbers,extra,max,size);
for (i = 0; i < size; ++i)
{
	printf("%d ",extra[i]);
}
return 0;
}
int main(){
    int ar[5] = {1,0,0,0,2};
    int size = sizeof(ar)/sizeof(ar[0]);
    countingsort(ar,size);
    return 0;
}