L2-010排座位C语言(测试点二没过)

#include
#include
struct peo
{int fri[102];int di[102];
}; struct peo peo[102];
//建立结构体记录每一个人的朋友和死对头
int main()
{int n, m, k;scanf("%d %d %d", &n, &m, &k);int arrf[102] = { 0 }, arrd[102] = { 0 };while (m != 0){int peo1, peo2, rel;m--;scanf("%d %d %d", &peo1, &peo2, &rel);if (rel == 1){peo[peo1].fri[arrf[peo1]] = peo2;peo[peo2].fri[arrf[peo2]] = peo1;arrf[peo1]++;arrf[peo2]++;}else{peo[peo1].di[arrd[peo1]] = peo2;peo[peo2].di[arrd[peo2]] = peo1;arrd[peo1]++;arrd[peo2]++;}
//如果该rel代表关系的量的值为1,会给对应的人加入敌友关系
//arrf代表对应编号的人的朋友的记录下标,arrd代表对应编号的死对头的记录下标
//每当朋友增加的时候,会给对应编号的arrf进行相加,死对头也是一样}while (k != 0){k--;int pe1, pe2;scanf("%d %d", &pe1, &pe2);int flag = 0, fflag = 0, ind = 0;for (int m = 0; m < arrf[pe1]; m++){if (peo[pe1].fri[m] == pe2){printf("No problem\n");flag = 1;break;}}
//首先寻找朋友(这个最好找)
//我们想要知道这两个人的关系只需要查找一个人的fri去寻找是否有对应编号
//不需要去第二个人中继续寻找if (flag == 1){continue;}else{for (int m = 0; m < arrd[pe1]; m++){if (peo[pe1].di[m] == pe2){ind = 1;break;}}
//这一步仅仅是判断两个是否有敌对关系
//用ind的值来记录二人是否有敌对关系,如果有敌对关系才能进行寻找相同朋友的过程if (ind == 1){for (int a = 0; a < arrf[pe1]; a++){for (int b = 0; b < arrf[pe2]; b++){if (peo[pe1].fri[a] == peo[pe2].fri[b]){fflag = 1;break;}}}
//寻找相同的朋友,如果有相同的朋友,会将fflag标记为1
//fflag的作用就是记录二者在有敌对关系的同时是否具有相同的朋友}}if (fflag == 1){printf("OK but...\n");continue;}
//如果fflag=1,那么ind一定等于1,所以条件中不用加入判断ind的值if (ind == 1 && fflag == 0){printf("No way\n");continue;}
//ind等于1不代表ffalg的值,但是又不能直接使用else,因为其中还包括ind=0的情况if (flag == 0 && fflag == 0){printf("OK\n");continue;}}
}

没做对,也没用并查集,就是想记录一下自己这个思想

叉会儿腰


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部