[中等] UVa OJ 804 Petri Net Simulation
2017-09-01 19:45
295 查看
题目描述
思路:
本题实际上只是个简单的模拟,只不过题目比较长,理解起来有些难度,故划为中等难度。
不过另人费解的是我下面的代码不论我如何修改输出格式总是PE,如果哪位读者发现我下面代码输出格式的问题,还请评论指出,在此提前表示感谢。
具体代码:
#include <iostream>
#include <vector>
using namespace std;
const int maxn=100+4;
vector<int> Tin[maxn];
vector<int> Tout[maxn];
struct State
{
int P[maxn];
};
State st;
State stbk;
int np;
int nt;
int simulate(int fn)
{
for(int i=0;i<fn;++i)
{
bool dead=true;
for(int j=1;j<=nt;++j)
{
bool ok=true;
stbk=st;
for(int k=0;k<Tin[j].size();++k)
{
if(stbk.P[Tin[j][k]]<1)
{
ok=false;
break;
}
--stbk.P[Tin[j][k]];
}
if(ok)
{
for(int k=0;k<Tin[j].size();++k)
--st.P[Tin[j][k]];
for(int k=0;k<Tout[j].size();++k)
++st.P[Tout[j][k]];
dead=false;
break;
}
}
if(dead)
return i;
}
return -1;
}
int main()
{
//freopen("input.txt","r",stdin);
int kase=0;
for(cin>>np;np!=0;cin>>np)
{
++kase;
for(int i=1;i<=np;++i)
{
cin>>st.P[i];
}
cin>>nt;
for(int i=1;i<=nt;++i)
{
Tin[i].clear();
Tout[i].clear();
int t;
for(cin>>t;t!=0;cin>>t)
{
if(t<0)
Tin[i].push_back(-t);
else
Tout[i].push_back(t);
}
}
int fireNum;
cin>>fireNum;
int result=simulate(fireNum);
if(result==-1)
cout<<"Case "<<kase<<": still live after "<<fireNum<<" transitions"<<endl;
else
cout<<"Case "<<kase<<": dead after "<<result<<" transitions"<<endl;
cout<<"Places with tokens: ";
bool f2=true;
for(int i=1;i<=np;++i)
{
if(st.P[i]>0)
{
if(f2)
f2=false;
else
cout<<" ";
cout<<i<<" ("<<st.P[i]<<")";
}
}
cout<<endl<<endl;
}
return 0;
}
思路:
本题实际上只是个简单的模拟,只不过题目比较长,理解起来有些难度,故划为中等难度。
不过另人费解的是我下面的代码不论我如何修改输出格式总是PE,如果哪位读者发现我下面代码输出格式的问题,还请评论指出,在此提前表示感谢。
具体代码:
#include <iostream>
#include <vector>
using namespace std;
const int maxn=100+4;
vector<int> Tin[maxn];
vector<int> Tout[maxn];
struct State
{
int P[maxn];
};
State st;
State stbk;
int np;
int nt;
int simulate(int fn)
{
for(int i=0;i<fn;++i)
{
bool dead=true;
for(int j=1;j<=nt;++j)
{
bool ok=true;
stbk=st;
for(int k=0;k<Tin[j].size();++k)
{
if(stbk.P[Tin[j][k]]<1)
{
ok=false;
break;
}
--stbk.P[Tin[j][k]];
}
if(ok)
{
for(int k=0;k<Tin[j].size();++k)
--st.P[Tin[j][k]];
for(int k=0;k<Tout[j].size();++k)
++st.P[Tout[j][k]];
dead=false;
break;
}
}
if(dead)
return i;
}
return -1;
}
int main()
{
//freopen("input.txt","r",stdin);
int kase=0;
for(cin>>np;np!=0;cin>>np)
{
++kase;
for(int i=1;i<=np;++i)
{
cin>>st.P[i];
}
cin>>nt;
for(int i=1;i<=nt;++i)
{
Tin[i].clear();
Tout[i].clear();
int t;
for(cin>>t;t!=0;cin>>t)
{
if(t<0)
Tin[i].push_back(-t);
else
Tout[i].push_back(t);
}
}
int fireNum;
cin>>fireNum;
int result=simulate(fireNum);
if(result==-1)
cout<<"Case "<<kase<<": still live after "<<fireNum<<" transitions"<<endl;
else
cout<<"Case "<<kase<<": dead after "<<result<<" transitions"<<endl;
cout<<"Places with tokens: ";
bool f2=true;
for(int i=1;i<=np;++i)
{
if(st.P[i]>0)
{
if(f2)
f2=false;
else
cout<<" ";
cout<<i<<" ("<<st.P[i]<<")";
}
}
cout<<endl<<endl;
}
return 0;
}
相关文章推荐
- 【习题 6-7 UVA - 804】Petri Net Simulation
- 804 - Petri Net Simulation(简单魔模拟)
- UVa 804 - Petri Net Simulation(模拟)
- UVA 804 Petri Net Simulation
- Uva - 804 - Petri Net Simulation
- Uva - 804 - Petri Net Simulation
- 804 - Petri Net Simulation
- UVA - 804 Petri Net Simulation
- UVa 804 Petri Net Simulation
- Petri Net Simulation UVA - 804
- 804 - Petri Net Simulation
- 习题6-7 Petri网模拟(Petri Net Simulation, ACM/ICPC World Finals 1998, UVa804)
- [刷题]算法竞赛入门经典(第2版) 6-7/UVa804 - Petri Net Simulation
- uva804 Petri Net Simulation [PKU2017SC](模拟)
- [中等] UVa OJ 1395 Slim Span
- Petri-net Tools and Software
- 分享关于ASP.NET中等安全模式的一些经验【转】
- Petri Net
- petri net
- [中等] UVa OJ 11400 Lighting system design 动态规划