笔试

pdd 9.22笔试 第二题
#include<bits/stdc++.h>
using namespace std;
int dis[2][2]={ {1,0},{0,1} };
int colors[1005][1005];
//bool visited[1005][1005]; //不需要判断是否走过 
vector<vector<int> > has;
vector<int> visited;

void dfs(int n,int m,int starti,int startj)
{
    if(starti <=n && starti>=1 && startj <=m && startj>=1 ) //在地图范围内 
    {
        if(n == starti && startj == m)
        {
            if(find(visited.begin(),visited.end(),colors[starti][startj]) == visited.end()) //不存在当前元素
            {                
                visited.push_back(colors[starti][startj]); 
                has.push_back(visited);
                visited.pop_back();
            }
            return ;
        }
        if(find(visited.begin(),visited.end(),colors[starti][startj]) == visited.end()) //不存在当前元素
        {
            visited.push_back(colors[starti][startj]); 
            for(int i=0;i<2;i++)
            {                
                dfs(n,m,starti+dis[i][0],startj+dis[i][1]); 
            }
            visited.pop_back();
        
    }
    
}

int main()
{
    int t;
    cin>>t;
    int n,m,k;
    while(t--)
    {
        cin>>n>>m>>k;
        memset(colors,0,sizeof(colors));
        has.clear();
        visited.clear();
        for(int i=1;i<=n;i++ )
        {
            for(int j=1;j<=m;j++)
            scanf("%d",&colors[i][j]);
        }
        if(n+m-1 > k) cout<<"0"<<endl;
        else
        {
            dfs(n,m,1,1); /*
            cout<<"begins:"<<endl;
            for(int j=0;j<has.size();j++)
            {
                for(int i=0;i<has[j].size();i++)
                {
                    cout<<has[j][i]<<" ";
                }
                cout<<endl;
            }
            */
            cout<<has.size()<<endl;
        }
    }
    return 0;
}
/*

3
3 3 7
1 4 9
10 6 10
3 3 5
3 3 6
10 9 6
10 10 10
1 7 4
3 3 7
1 1 2
5 5 8
3 9 7

*/
#拼多多##笔经#
全部评论

相关推荐

10-14 15:29
云南大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务