今天在写atcoder contest 080E - Young Maids时,在我的solve()函数里面总是说我的
down没有初始化,但是我明明在循环里面初始化了啊?
附上代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> ans;
int n;
const int INF = 0x3f3f3f;
void solve(vector<int> dir,int f,int s)
{
if (dir.empty()) return;
int maxhead = 0, cnt = 0,down;
for (int i = 0; i < dir.size()-1; ++i) {
if (dir[i] != f && dir[i] != s) {
if (dir[i + 1] != f && dir[i + 1] != s) {
if (dir[i] > maxhead) {
cout << "ok" << endl;
cout << i << endl;
maxhead = dir[i];
down = i;
}
}
}
}
cout << down << endl;
ans.push_back(dir[down + 1]); ans.push_back(dir[down]);
vector<int> nex;
for (int i = 0; i < dir.size(); ++i) {
if (i != down && i!=down+1) {
nex.push_back(dir[i]);
}
}
solve(nex, f, s);
}
int main()
{
vector<int> iv; int temp,goalf=INF,goals=INF;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> temp;
iv.push_back(temp);
if (temp < goalf && !(i%2)) {
goalf = temp;
}
}
int i;
for (i = 0; iv[i] != goalf; ++i);
for (int j = i + 1; j < n; ++j) {
if (iv[j] < goals) {
goals = iv[j];
}
}
cout << goalf << " " << goals << endl;
solve(iv,goalf,goals);
reverse(ans.begin(), ans.end());
for (int i = 0; i < ans.size(); ++i) {
cout << ans[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
望各位能指点一二,谢了
我初始化了0,最后有一行输出了0,说明这次没进入if里面,因为你的方法是递归的,递归到这一次出错了,前面虽然给down赋值了,不过这次递归又是新的一次。
你在if条件里面做了初始化,如果条件不满足,就会出现没有初始化的情况,应该在编译的时候就会报错吧。
if (dir[i] > maxhead) {
cout << "ok" << endl;
cout << i << endl;
maxhead = dir[i];
down = i;
}
楼主错在这里,在对down定义的时候没有进行初始化而是在if语句中进行初始化的,但是if的条件会有不满足的时候,所以会出现错误,所以建议楼主在一开始down声明的时候进行一下初始化就ok了
编译的时候过了,是在测试数据的时候显示runtime error
比如数据
4
3 2 4 1
编译器显示我没有初始化,但if条件却进去了!(我有个cout<<ok<<endl; 那边显示出来了)