。。。。。。。。。。。。。。。。。。。。

来源:互联网 发布:怎么注册开淘宝店 编辑:程序博客网 时间:2024/06/05 16:45
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <sstream>#include <algorithm>#include <vector>#include <fstream>#include <stack>using namespace std;void split(const string& src, const string& delim,int dest[][200]){string str = src;string::size_type start = 0;string::size_type index;string substr;int tmp;int count=0;stringstream ss;index = str.find_first_of(delim,start);ss<<str.substr(start+1,index-start-2);ss>>tmp;start = str.find_first_not_of(delim,index);index = str.find_first_of(delim,start);    while(index != string::npos){stringstream ss1;int number;ss1<<str.substr(start+1,index-start-1);ss1>>number;        dest[tmp][count++] = number;start = str.find_first_not_of(delim,index);if(start == string::npos)return;index = str.find_first_of(delim,start);}stringstream ss2;int number;ss2<<str.substr(start+1,index-start-1);ss2>>number;dest[tmp][count] = number;}int GetPosFromGirl(int girl[][200],int girlNum,int boyNum){for(int i=0;i<200;i++)if(girl[girlNum][i] == boyNum)return i;return -1;}void StableMatching(stack<int> boyAlone,int num,int boy[][200],int girl[][200],int boySelect[],int boySelectPos[],int girlAccept[]){int choice = boy[num][boySelectPos[num]];if(girlAccept[choice] == -1){girlAccept[choice] = num;boySelect[num] = choice;}else{int acceptBoy = GetPosFromGirl(girl,choice,girlAccept[choice]);intnewBoy = GetPosFromGirl(girl,choice,num);if(acceptBoy < newBoy){boySelectPos[num]++;boyAlone.push(num);}else{boySelectPos[girlAccept[choice]]++;boyAlone.push(girlAccept[choice]);girlAccept[choice] = num;boySelect[num] = choice;}}}int main(int argc, char ** argv){ifstream boyfile;ifstream girlfile;ofstream resultfile;char buf[1024];int boy[200][200];int girl[200][200];string message;string delim(" ");boyfile.open("boys_rankings.txt");if(boyfile.is_open()){while(boyfile.good() && !boyfile.eof()){memset(buf,0,1024);boyfile.getline(buf,1024);message = buf;if(message!="")split(message,delim,boy);elsebreak;}}boyfile.close();girlfile.open("girls_rankings.txt");if(girlfile.is_open()){while(girlfile.good() && !girlfile.eof()){memset(buf,0,1024);boyfile.getline(buf,1024);message = buf;if(message!= "")split(message,delim,girl);else break;}}int boySelect[200] = {0};int boySelectPos[200] = {0};int girlAccept[200];memset(girlAccept,-1,200);stack<int> boyAlone;for(int i=0;i<200;i++){StableMatching(boyAlone,i,boy,girl,boySelect,boySelectPos,girlAccept);}while(boyAlone.size()!=0){int k = boyAlone.top();boyAlone.pop();StableMatching(boyAlone,k,boy,girl,boySelect,boySelectPos,girlAccept);}resultfile.open("resultMatch.txt");if(resultfile.is_open()){for(int i=0;i<200;i++)resultfile<<"男生B"<<i<<" 和 女生G"<<boySelect[i]<<" 约会"<<endl;}return 0;    }

0 0
原创粉丝点击