您的位置:首页 > 理论基础 > 数据结构算法

数据结构拓扑基本程序

2015-10-20 15:47 309 查看
//确定比赛名次

/*#include<iostream>

#include<vector>

#include<queue>

using namespace std;

vector<int>edge[501];

priority_queue<int, vector<int>,greater<int> > Q;

int main(){

int inDegree[501];

int n,m;

while(cin>>n>>m){

if(n==0&&m==0) break;

for(int i=1;i<=n;i++){

inDegree[i]=0;

edge[i].clear();

}

while(m--){

int a,b;

cin>>a>>b;

inDegree[b]++;

edge[a].push_back(b);

}

while(Q.empty()==false) {

Q.pop();

}

for(int i=1;i<=n;i++){

if(inDegree[i]==0){

Q.push(i);

}

}

int cnt=0;

while(Q.empty()==false){

int nowp=Q.top();

if(cnt!=n-1) cout<<nowp<<" ";

else cout<<nowp<<endl;

Q.pop();

cnt++;

for(int i=0;i<edge[nowp].size();i++){

inDegree[edge[nowp][i]]--;

if(inDegree[edge[nowp][i]]==0){

Q.push(edge[nowp][i]);

}

}

}

}

return 0;

}*/

//产生冠军

#include<iostream>

#include<vector>

#include<queue>

#include<string.h>

using namespace std;

vector<int>edge[2000];

int inDegree[2000];

int m;

char s[2000][3][20];

int sa[2000][3];

int num=2;

int main(){

int c,a,b;

while(cin>>m){

if(m==0) break;

c=0;num=2;

for(int i=0;i<2000;i++){

inDegree[i]=0;

edge[i].clear();

sa[i][0]=123123;sa[i][1]=123123;

}

sa[0][0]=0;sa[0][1]=1;

for(int i=0;i<m;i++){

cin>>s[i][0]>>s[i][1];

int flag1=0,flag2=0;

for(int j=0;j<i;j++){

if(strcmp(s[i][0],s[j][0])==0) {

sa[i][0]=sa[j][0];flag1=1;

}

else if(strcmp(s[i][0],s[j][1])==0) {

sa[i][0]=sa[j][1];flag1=1;

}

if(strcmp(s[i][1],s[j][0])==0) {

sa[i][1]=sa[j][0];flag2=1;

}

else if(strcmp(s[i][1],s[j][1])==0) {

sa[i][1]=sa[j][1];flag2=1;

}

}

if(flag1==0&&i!=0){

sa[i][0]=num;num++;

}

if(flag2==0&&i!=0){

sa[i][1]=num;num++;

}

a=sa[i][0];

b=sa[i][1];

inDegree[b]++;

edge[a].push_back(b);

}

for(int i=0;i<num;i++){

if(inDegree[i]==0){

c++;

}

}

if(c==1) cout<<"YES"<<endl;

else cout<<"NO"<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: