当前位置: 代码迷 >> 综合 >> poj 2491 Scavenger Hunt 字符串离散化
  详细解决方案

poj 2491 Scavenger Hunt 字符串离散化

热度:34   发布时间:2024-01-19 06:18:23.0

题意:

乱序给出一条有n个结点的路径上的每对前前驱结点和后继结点,求原路径。

分析:

水题,直接保存每个结点的后继结点,然后找到开始结点遍历一遍输出就可以了,值得说说的是怎么用map来进行字符串离散化,即把一个字符串和一个整数对应,并给出整数能找到相应的字符串,请参考程序。

代码:

//poj 2491
//sep9
#include <iostream>
#include <string>
#include <map>
using namespace std;
const int maxN=512; 
map<string,int> m;
string ans[maxN];
int n;
int start[maxN],next[maxN];int main()
{int cases,caseNum=0;cin>>cases;while(cases--){m.clear();n=0;memset(start,0,sizeof(start));memset(next,-1,sizeof(next));int i,stepNum;cin>>stepNum;for(i=1;i<stepNum;++i){string a,b;cin>>a>>b;if(m[a]==0) m[a]=++n;if(m[b]==0) m[b]=++n;int u=m[a],v=m[b];start[v]=1;next[u]=v;}map<string,int>::iterator iter;for(iter=m.begin();iter!=m.end();++iter)ans[iter->second]=iter->first;				for(i=1;i<=n;++i)if(start[i]==0)break;		printf("Scenario #%d:\n",++caseNum);	while(i!=-1){cout<<ans[i]<<endl;i=next[i];	}cout<<endl;	}return 0;	
}