程序设计与数据结构综合实践II第一周练习 A - Isenbaev's Number

来源:互联网 发布:unity3d制作软件下载 编辑:程序博客网 时间:2024/05/13 02:19

Description

Isenbaev's Number: Isenbaev本人为0,Isenbaev的队友为1,Isenbaev的队友的队友为2,……以此类推 

Input

第一行:n ([1, 100]) 后n行:n支队伍的队友(三人)

Output

选手名称 Isenbaev's Number/n

Sample Input

inputoutput
7Isenbaev Oparin ToropovAyzenshteyn Oparin SamsonovAyzenshteyn Chevdar SamsonovFominykh Isenbaev OparinDublennykh Fominykh IvankovBurmistrov Dublennykh KurpilyanskiyCormen Leiserson Rivest
Ayzenshteyn 2Burmistrov 3Chevdar 3Cormen undefinedDublennykh 2Fominykh 1Isenbaev 0Ivankov 2Kurpilyanskiy 3Leiserson undefinedOparin 1Rivest undefinedSamsonov 2Toropov 1
实现代码:
#include<iostream>#include<vector>#include<string>#include<algorithm>#include<queue>using namespace std;const int INF = 999;int getIndex(vector<vector<string> > nameList, string name){for(int i = 0; i < nameList.size(); ++ i){if(name == nameList[i][0]){return i;}}return -1;}bool ifExist(vector<string> nameList, string name){for(int i = 0; i < nameList.size(); ++ i){if(name == nameList[i]){return true;}}return false;}bool cmp(vector<string> name1, vector<string> name2){return name1[0] < name2[0];}int main(){vector<vector<string> > nameList;int n;cin >> n;string tem;getline(cin, tem);<span style="white-space:pre"></span>、、for(int i = 0; i < n; ++ i){string _names;string teammates[3];getline(cin, _names);for(int j = 0; j < 3; ++ j){int firstSpaceIndex = _names.find_first_of(' ');teammates[j] = _names.substr(0, firstSpaceIndex);_names = _names.substr(firstSpaceIndex+1);}for(int j = 0; j < 3; ++ j){int index = getIndex(nameList, teammates[j]);if(index == -1){vector<string> tempPlayer;nameList.push_back(tempPlayer);nameList[nameList.size()-1].push_back(teammates[j]);index = nameList.size()-1;}for(int k = 0; k < 3; ++ k){if(teammates[k] != nameList[index][0] && !ifExist(nameList[index], teammates[k]))nameList[index].push_back(teammates[k]);}}}sort(nameList.begin(), nameList.end(), cmp);vector<int> IseNum(nameList.size());for(int i = 0; i < nameList.size(); ++ i)IseNum[i] = INF;<span style="white-space:pre"></span>//初始化if(getIndex(nameList, "Isenbaev") != -1)    //<span style="font-family: Arial, Helvetica, sans-serif;">Isenbaev可能不存在</span>{IseNum[getIndex(nameList, "Isenbaev")] = 0;queue<int> com;<span style="white-space:pre"></span>//使用队列进行广度优先遍历com.push(getIndex(nameList, "Isenbaev"));while(!com.empty()){int q = com.front();com.pop();for(int k = 0; k < nameList[q].size(); ++ k){int _index = getIndex(nameList, nameList[q][k]);if(IseNum[_index] > IseNum[q]+1){IseNum[_index] = IseNum[q]+1;<span style="white-space:pre"></span>//更新选手的<span style="font-family:Arial, Helvetica, sans-serif;">IseNum</span>}}}}for(int i = 0; i < IseNum.size(); ++ i){cout << nameList[i][0] << " ";if(IseNum[i] < 999) cout << IseNum[i];else cout << "undefined";cout << endl;}return 0;}

0 0