uva101木块问题 逻辑上和紫书一致但只过了样例,求debug
已尝试问ai/向紫书的写法靠拢,无果
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
const int n = 100010;
vector <int> q[n];//每一个q[i]是一个vector不定长数组
int m;//m个木块m个堆
void found(int k, int &pk, int &hk)
{
for(int i = 0; i < m; i ++)
{
for(int j = 0; j < q[i].size(); j ++)
{
if(q[i][j] == k)
{
pk = i;
hk = j;
return;
}
}
}
}
void backplace(int pk, int hk)
{
for(int i = hk+1; i < q[pk].size(); i ++)
{
int c = q[pk][i];
q[c].push_back(c);
}
q[pk].resize(hk+1);//拿走了3以上的,剩0123,h=3+1即hk+1
}
void puton(int pa, int ha, int pb)
{
for(int i = ha; i < q[pa].size();i ++)
{
int c = q[pa][i];
q[pb].push_back(c);
}
q[pa].resize(ha);//拿走了3,剩012,h=3即hk
}
void print()
{
for(int i = 0; i < m; i ++)
{
printf("%d: ", i);
for(int j = 0; j < q[i].size(); j ++)
{
printf("%d ", q[i][j]);
}
printf("\n");
}
}
int main()
{
scanf("%d",&m);
for(int i = 0; i < m; i ++)
{
q[i].push_back(i);//初始化i号块弹入i号堆
}
//scanf 的 %s 格式符需要 char[] 类型的参数
//直接传递 string 的地址会导致未定义行为
string p, q;
int a, b;
while(cin >> p && p != "quit" && cin >> a >> q >> b)
{
int pa, ha, pb, hb;
found(a, pa, ha);
found(b, pb, hb);
if(pa == pb) continue;
if(p == "move") backplace(pa, ha);
if(q == "onto") backplace(pb, hb);
puton(pa, ha, pb);
}
print();
return 0;
}