版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beijiafei/article/details/80069000
#include <iostream>
using namespace std;
struct Goodfris{
int fris[101];//好朋友
int time;//好朋友的个数
};
int com(Goodfris a,Goodfris b){//判断关系为2的情况
int timeRow = a.time;
int timeCol = b.time;
for(int i=0;i<timeRow;i++){
for(int j=0;j<timeCol;j++){
if(a.fris[i] == b.fris[j]){
return 1;
}
}
}
return -1;
}
int main(){
//freopen("in.txt","r",stdin);
Goodfris good[101];
int N; //前来参宴的宾客总人数,则这些人从1到N编号
int M; //M为已知两两宾客之间的关系数
int K; //K为查询的条数
cin>>N>>M>>K;
int rela[101][101];//总关系
int now[10005][3]; //M的关系
for(int i=0;i<M;i++){
cin>>now[i][0]>>now[i][1]>>now[i][2];
}
int find[10005][2]; //要找的关系
for(int i=0;i<K;i++){
cin>>find[i][0]>>find[i][1];
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
rela[i][j] = 0;//不是朋友,也不敌对
rela[j][i] = 0;
}
good[i].time = 0;//初始化
}
for(int i=0;i<M;i++){//根据条件,得出的关系
int row = now[i][0];
int col = now[i][1];
int res = now[i][2];
rela[row][col] = res;
rela[col][row] = res;//关系是相互的
}
for(int i=0;i<M;i++){//判断每一个人的好朋友
if(now[i][2] == 1){
int row = now[i][0];
int col = now[i][1];
int timeRow = good[row].time;
int timeCol = good[col].time;
good[row].fris[timeRow] = col;
good[row].time += 1;
good[col].fris[timeCol] = row;
good[col].time +=1;
}
}
for(int i=0;i<M;i++){//敌人的共同朋友
if(now[i][2] == -1){
int row = now[i][0];//
int col = now[i][1];
if(com(good[row],good[col]) == 1){//最后的bug
rela[row][col] = 2;
rela[col][row] = 2;
}
}
}
for(int i=0;i<K;i++){
int row = find[i][0];
int col = find[i][1];
if(rela[row][col] == 1){ //如果两位宾客之间是朋友,且没有敌对关系
cout<<"No problem"<<endl;
}
else if(rela[row][col] == 0){ //如果他们之间并不是朋友,但也不敌对
cout<<"OK"<<endl;
}
else if(rela[row][col] == -1){ //如果他们之间只有敌对关系
cout<<"No way"<<endl;
}
else if(rela[row][col] == 2){ //如果他们之间有敌对,然而也有共同的朋友
cout<<"OK but..."<<endl;
}
}
//fclose(stdin);
return 0;
}
没有完全AC的代码。
题目:https://www.patest.cn/contests/gplt/L2-010