我的选书程序有问题,请大家们帮我看下

学校放寒假时,我有A,B,C,D,E五本书,要分给张、王、刘、孙、李五位同学,每人只能选一本书。
我事先让每个人将自己喜欢的书填写在如下的表格中。然后根据他们填写的表来分配书本,希望设计一个程序帮我求出所有可能的分配方案,使每个学生都满意。

img

输入格式
输入五行,每行有五个数据,0表示不喜欢这本书,1表示喜欢这本书。

输出格式
如果没有可能的方案,输出0,否则按下面格式输出每一种方案。

answer x:

1: A

2: B

3: C

4: D

5: E
我的程序有问题,请大家们帮忙看一下

#include
using namespace std;
int a[10][10];
int vis[6];
int ans[6];
int t=0;
void print(){
     t++;
     cout<<"answer "<":"<for(int i=1;i<=5;i++){
         cout<":";
        switch(ans[i]){
            case 1:cout<<"A"<break;
            case 2:cout<<"B"<break;
            case 3:cout<<"C"<break;
            case 4:cout<<"D"<break;
            case 5:cout<<"E"<break;
        }
     }
     cout<void search(int step){
     if(step==6){
         print();
     }
     else{
         for(int i=1;i<=5;i++){
             if(!vis[i]&&a[step][i]){
                 ans[step]=i,vis[i]=1;
                 search(step+1);
                 vis[i]=0;
             }
         }
     }    
}
int main(){
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            cin>>a[i][j];
        }
    }
    if(t==0){
        cout<<"0"<return 0;
    }
    search(1);
    return 0;
}

数组下标范围是0-4,而不是1-5