编程题
2025-08-21 11:42:05
发布于:浙江
@费先生
1.
#include <bits/stdc++.h>
using namespace std;
int n,m,ans,num;
bool mp[1010][1010],vis[1010];
void dfs(int x){
num++;
vis[x]=1;
for(int i=1;i<=n;i++){
if(mp[x][i]&&!vis[i])dfs(i);
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
mp[u][v]=mp[v][u]=1;
}
for(int i=1;i<=n;i++){
if(!vis[i]){
num=0;
dfs(i);
ans=max(ans,num);
}
}
cout<<ans;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,ans=INT_MAX;
bool mp[1010][1010],vis[1010],flag;
void dfs(int x,int cnt){
if(x==y){
flag=1;
ans=min(ans,cnt);
return;
}
for(int i=1;i<=n;i++){
if(mp[x][i]&&!vis[i]){
vis[i]=1;
dfs(i,cnt+1);
vis[i]=0;
}
}
return;
}
signed main(void){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
mp[u][v]=1;
}
cin>>x>>y;
dfs(x,0);
if(flag)cout<<ans;
else cout<<-1;
return 0;
}
#include <bits/stdc++.h>
#define N 1005
using namespace std;
long long dp[N][N];
long long a[N][N];
bool vis[N][N];
int main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>a[i][j];
while(k--){
int x,y;
cin>>x>>y;
vis[x][y]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(vis[i][j])continue;
if(i==1&&j==1)dp[1][1]=a[1][1];
else if(dp[i-1][j]||dp[i][j-1])dp[i][j]=max(dp[i-1][j],dp[i][j-1])+a[i][j];
}
}
cout<<dp[n][n];
return 0;
}
全部评论 1
顶
1周前 来自 浙江
0
有帮助,赞一个