今天在写活动安排问题时发现了codeblocks的一个问题
#include<iostream> #include<algorithm> #define MAXSIZE 100 using namespace std; typedef struct activity { int start; int end; }activity; bool compare(activity a,activity b); void greedySelector(activity act[],int n); int main(void) { int n; cin>>n; activity act[MAXSIZE]; for(int i=1;i<=n;i++) { cin>>act[i].start>>act[i].end; } sort(act,act+n,compare); for(int i=1;i<=n;i++) { cout<<act[i].start<<' '<<act[i].end<<endl; } greedySelector(act,n); return 0; } bool compare(activity a,activity b) { if(a.end!=b.end) { return (a.end<b.end); } else { return a.start<b.start; } } void greedySelector(activity act[],int n) { bool select[n+1]; for(int i=1;i<=n;i++) { select[i]=false; } select[1]=true; int temp=1; for(int i=2;i<=n;i++) { if(act[i].start>=act[temp].end) { select[i]=true; temp=i; } } for(int i=1;i<=n;i++) { if(select[i]==true) { cout<<i<<' '; } } cout<<endl; } /* input 11 1 4 0 6 6 10 3 8 3 5 8 12 5 9 8 11 2 13 5 7 12 14 output 1 4 8 11 */
则输出1 4 8 11
如果把主函数里面的
22 for(int i=1;i<=n;i++) 23 { 24 cout<<act[i].start<<' '<<act[i].end<<endl; 25 }
注释掉的话
#include<iostream> #include<algorithm> #define MAXSIZE 100 using namespace std; typedef struct activity { int start; int end; }activity; bool compare(activity a,activity b); void greedySelector(activity act[],int n); int main(void) { int n; cin>>n; activity act[MAXSIZE]; for(int i=1;i<=n;i++) { cin>>act[i].start>>act[i].end; } sort(act,act+n,compare); greedySelector(act,n); return 0; } bool compare(activity a,activity b) { if(a.end!=b.end) { return (a.end<b.end); } else { return a.start<b.start; } } void greedySelector(activity act[],int n) { bool select[n+1]; for(int i=1;i<=n;i++) { select[i]=false; } select[1]=true; int temp=1; for(int i=2;i<=n;i++) { if(act[i].start>=act[temp].end) { select[i]=true; temp=i; } } for(int i=1;i<=n;i++) { if(select[i]==true) { cout<<i<<' '; } } cout<<endl; } /* input 11 1 4 0 6 6 10 3 8 3 5 8 12 5 9 8 11 2 13 5 7 12 14 output 1 4 8 11 */
输出1 3 7 11
因此,我把代码放在VC++6.0中运行,完全没有问题。
所以,我得出结论。codeblocks可能有问题吧。