依图科技笔试
1.
//1 // int main() // { // int n; // cin>>n; // vector<int>t(n,0); // vector< vector<int> >v(n,vector<int>(3,0)); // for(int i=0;i<n;i++) // { // cin>>t[i]; // for(int j=0;j<3;j++) // { // cin>>v[i][j]; // } // } // double M=0.0; // int index=0; // for(int i=0;i<n-1;i++) // { // double s=(v[i+1][0]-v[i][0])*(v[i+1][0]-v[i][0])+(v[i+1][1]-v[i][1])*(v[i+1][1]-v[i][1])+(v[i+1][2]-v[i][2])*(v[i+1][2]-v[i][2]); // double time=t[i+1]-t[i]; // ; // if((s/time)>M) // { // M=s/time; // index=i; // } // } // cout<<index+1<<endl; // }2.各位大佬询问一下为何dfs本地可以跑通 提交就是0%
#include<iostream> #include<bits/stdc++.h> using namespace std; //2 int TIME=INT_MAX; int t=0; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; void dfs(int x,int y, int target_x,int target_y,vector<int>&cost,vector< vector<int>> &visited,vector< vector<int>>&g) { int h=g.size(); int w=g[0].size(); if(x==target_x && y==target_y ) { TIME=min(TIME,t); } else { for(int i=0;i<4;i++) { int x1=x+dir[i][0]; int y1=y+dir[i][1]; if(x1>=0 && x1<h && y1>=0 && y1<w && g[x1][y1]==1 && visited[x1][y1]==0)// 違背訪問可以走 { visited[x1][y1]=1; t=t+cost[i]; dfs(x1,y1,target_x,target_y,cost,visited,g); t=t-cost[i]; visited[x1][y1]=0; } } } } int main() { int count; cin>>count; for(int qwe=0;qwe<count;qwe++) { int h,w,target_x,target_y; cin>>h; cin>>w; vector< vector<int> >visited(h,vector<int>(w,0));//均違背訪問 visited[0][0]=1; cin>>target_x; cin>>target_y; vector<int>cost(4,0); for(int i=0;i<4;i++) cin>>cost[i]; vector< vector<int> >g(h,vector<int>(w,0)); for(int i=0;i<h;i++) for(int j=0;j<w;j++) { char a; cin>>a; if(a=='o') g[i][j]=1; } int t=0; int flag=0;//not go for(int i=0;i<4;i++) { int x1=0+dir[i][0]; int y1=0+dir[i][1]; if(x1>=0 && x1<h && y1>=0 && y1<w && g[x1][y1]==1 && visited[x1][y1]==0) flag=1; } if(flag==1) { dfs(0,0,target_x,target_y,cost,visited,g); cout<<"Case #"<<qwe+1<<": "<<TIME<<endl; } else { cout<<"Case #"<<qwe+1<<": "<<-1<<endl; } TIME=INT_MAX; t=0; } }