在空间中给出了n个点。这些点任三点不共线,并且每两个点之间都有一条线相连,每一条线不是红的就是黑的。在这些点和线组成的三角形中,如果一个三角形的三条边的颜色都相同,那么我们就称这个三角形为单色三角形。现给出所有涂红色的线,试求出单色三角形的数目。
标签:des class blog 文件 数据 string
在空间中给出了n个点。这些点任三点不共线,并且每两个点之间都有一条线相连,每一条线不是红的就是黑的。在这些点和线组成的三角形中,如果一个三角形的三条边的颜色都相同,那么我们就称这个三角形为单色三角形。现给出所有涂红色的线,试求出单色三角形的数目。
输入文件的第一行有一个整数T,表示下面有T组测试数据。接下来的行是T组测试数据的描述。每一组测试数据的第1行是两个整数n和m,其中整数n表示点数,m是红色边的数目,(0 <= m <= 250000, 3 <= n <= 1000)。接着有m行,每行包含两个整数p,k,表示这条红边的两个顶点,(1 <= p < k <= n)。
两组测试数据之间有一空行,输入直到文件结束。
输出文件有若干行。对输入文件中的每组测试数据,输出对应的单色三角形的数目。
#include<stdio.h> #include<string.h> int a[1000][1000];//记录你连的是什么 int c[1000][1000]; int b[1000][1000];//记录你连的是什么 int so1(int x1,int y1); int so2(int x1,int y1); int doge1(int x1); int doge2(int x1); void wow1(int x1,int y1); void wow2(int x1,int y1); int main() { // FILE *fp=NULL; // fp=fopen("文件.txt","r"); int m,n;//m点数 n红线数 int i; int number1=0; int number2=0; int j; int x1,y1; int apple; scanf("%d",&apple); int number=0; while(apple--) { memset(a,0,sizeof(a)); memset(b, 0,sizeof(b)); memset(c, 0,sizeof(c)); number1=0; number2=0; // fscanf(fp, "%d", &m); // fscanf(fp, "%d", &n); scanf("%d%d",&m,&n); for(i=1;i<=n;i++) { scanf("%d%d",&x1,&y1); //fscanf(fp, "%d", &x1); //fscanf(fp, "%d", &y1); b[x1][y1]=1; b[y1][x1]=1; }//输入 for(i=1;i<=m;i++) { for(j=1;j<=m;j++) { if(b[i][j]==1)wow1(i,j); else if(i!=j)wow2(i,j); else ; } }//输出矩阵 /* for(i=1;i<=m;i++) { for(j=1;j<=m;j++) { printf("%d ",a[i][j]); } printf("\n"); } printf("\n"); for(i=1;i<=m;i++) { for(j=1;j<=m;j++) { printf("%d ",c[i][j]); } printf("\n"); }*/ for(i=1;i<=m;i++) { number1=number1+doge1(i); } for(i=1;i<=m;i++) { number2=number2+doge2(i); } printf("%d\n",(number1+number2)/3); } //fclose(fp); return 0; } void wow1(int x1,int y1) { int i=1; while(a[x1][i]!=0) { i++; if(a[x1][i]==y1) { return; } } a[x1][i]=y1; } void wow2(int x1,int y1) { int i=1; while(c[x1][i]!=0) { i++; if(c[x1][i]==y1) { return; } } c[x1][i]=y1; } int doge1(int x1) { int i=1; int j=2; int number=0; int apple=i; while(a[x1][i]!=0) { i++; } apple=i-1; // printf("X1=%d\n",x1); // printf("apple=%d\n",apple); for(i=1;i<apple;i++) { for(j=i+1;j<=apple;j++) { if(so1(a[x1][i],a[x1][j])) { number++; // printf(" 3 %d\n",x1); } } } return number; } int doge2(int x1) { int i=1; int j=2; int number=0; int apple=1; while(c[x1][i]!=0) { i++; } apple=i-1; // printf("apple=%d\n",apple); for(i=1;i<apple;i++) { for(j=i+1;j<=apple;j++) { if(so2(c[x1][i],c[x1][j])) { number++; // printf(" %d %d \n",c[x1][i],c[x1][j]); } } } return number; } int so1(int x1,int y1) { int i=1; int number=0; while(a[x1][i]!=0) { if(a[x1][i]==y1) { // printf("---1 %d 2 %d ",x1,y1); return 1; } i++; } return 0; } int so2(int x1,int y1) { int i=1; int number=0; while(c[x1][i]!=0) { if(c[x1][i]==y1) { // printf("---1 %d 通到 2 %d ",x1,y1); return 1; } i++; } return 0; }
标签:des class blog 文件 数据 string
原文地址:http://www.cnblogs.com/zhko11993/p/3805463.html