笔试
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
*/
#拼多多##笔经#
#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
*/
#拼多多##笔经#