#include<iostream>
#include<string>
using namespace std;
const int Max=20;
const int Mlen=9999;
struct zp{
int k;
int value;
};
struct ma{
int h1;
int h2;
int v;
};
zp mar[Max][Max];
string*str;
int n,len;
void create(){
for(int i=0;i<Max;i++)
for(int j=0;j<Max;j++){
mar[i][j].k=-1;
mar[i][j].value=-1;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
mar[i][j].k=0;
mar[i][j].value=0;
}
str=new string[n];
for(int i=0;i<n;i++){
cin>>str[i];
}
cin>>len;
for(int i=0;i<len;i++){
string s1,s2;
int num;
cin>>s1>>s2>>num;
int z1,z2;
for(int i=0;i<n;i++){
if(str[i]==s1)
z1=i;
if(str[i]==s2)
z2=i;
}
mar[z1][z2].k=1;
mar[z1][z2].value=num;
mar[z2][z1].k=1;
mar[z2][z1].value=num;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<mar[i][j].k;
if(mar[i][j].k==1){
cout<<"("<<mar[i][j].value<<")";
}else{
cout<<" ";
}
//mar[i][j].value;
}
cout<<endl;
}
}
void prim(){
int ans=0;
string u;
cin>>u;
cout<<"prim:"<<endl;
int z;
for(int i=0;i<n;i++){
if(str[i]==u){
z=i;
}
}
ma*line=new ma[len];
for(int i=0;i<len;i++){
if(i!=z&&mar[z][i].k==1){
line[i]={ z,i,mar[z][i].value};
}else{
line[i]={ -1,i,Mlen};
}
}
line[z].v=0;
ma key;
int m=n-1;
while(m--){
int Min=Mlen;
for(int i=0;i<len;i++){
if(line[i].v!=0&&line[i].v<Min){
key=line[i];
Min=key.v;
}
}
cout<<str[key.h1]<<" "<<str[key.h2]<<" "<<key.v<<endl;
z=key.h2;
line[z].v=0;
for(int j=0;j<len;j++){
if(mar[z][j].k==1&&line[j].v!=0){
if(mar[z][j].value<line[j].v){
line[j].h1=z;
line[j].v=mar[z][j].value;
}
}
}
/*
0 1(6)1(1)1(5)0 0
0 0 1(5)0 1(3)0
0 0 0 1(5)1(6)1(4)
0 0 0 0 0 1(2)
0 0 0 0 0 1(6)
0 0 0 0 0 0
*/
}
}
void change(int visit[], int a, int b){//将两个顶点及与他们相通的顶点改成同样的值表示
//他们相通
for(int i= 0; i< n; i++)
if(visit[i]== a)
visit[i]= b;
}
void kruskal(){
int*visit=new int[n];
for(int i=0;i<n;i++){
visit[i]=i;
}
cout<<"kruskal:"<<endl;
int Min=Mlen;
ma*line=new ma[n];
for(int i=0;i<n;i++){
line[i]={-1,-1,Mlen};
}
ma kk;
for(int p=0;p<n;p++){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
if(visit[i]==1&&visist[j]==1)
//判断该边是否可能成环
int ww=0;
for(int w=0;w<p;w++){
if(line[w].h1==i||line[w].h2==i)
ww++;
if(line[w].h1==j||line[w].h2==j)
ww++;
}
if(ww>=2)
continue;
if(mar[i][j].value>0&&mar[i][j].value<Min)
Min=mar[i][j].value;
//cout<<Min<<" ";
kk.h1=i;
kk.h2=j;
kk.v=Min;
//kk={i,j,mar[i][j].value};
}
cout<<str[kk.h1]<<" "<<str[kk.h2]<<" "<<kk.v<<endl;
visit[kk.h1]=1;
visit[kk.h2]=1;
mar[kk.h1][kk.h2].value=0;
mar[kk.h2][kk.h1].value=0;
line[p]=kk;
}
}
int main(){
cin>>n;
create();
prim();
kruskal();
return 0;
}
#include<iostream>
using namespace std;
const int Max=100;
const int Mlen=1000;
int n;
int q;
struct ma {
int h1;
int h2;
int v;
};
int mar[Max][Max];
int*visit;
void create(){
cin>>n;
for(int i=0;i<Max;i++){
for(int j=0;j<Max;j++){
mar[i][j]=-1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>mar[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<mar[i][j];
cout<<" ";
}
cout<<endl;
}
visit= new int[n];
for (int i = 0; i<n; i++) {
visit[i] = -1;
}
cin>>q;
for(int i=0;i<q;i++){
int m1,m2;
cin>>m1>>m2;
int t1=m1-1;
int t2=m2-1;
mar[t1][t2]=0;
mar[t2][t1]=0;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
}
for (int i = 0; i<n; i++) {
cout<<visit[i]<<" ";
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<mar[i][j];
cout<<" ";
}
cout<<endl;
}
}
void kruskal() {
int ans=0;
int Min;
ma kk;
while(true) {//路径数目不一定等于点数减一
Min = Mlen;
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
if (visit[i] != -1 && visit[j] != -1) {
if (visit[i] == visit[j]) {
continue;
}
}
if (mar[i][j]>0 && mar[i][j]<Min) {
Min = mar[i][j];
kk.h1 = i;
kk.h2 = j;
kk.v = Min;
}
}
}
int t1 = kk.h1;
int t2 = kk.h2;
ans+=kk.v;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
mar[kk.h1][kk.h2] = 0;
mar[kk.h2][kk.h1] = 0;
int zzz=0;
for(int i=0;i<n;i++){
if(visit[i]==-1){
zzz=1;
}
}
if(zzz==0){
break;
}
}
cout<<ans<<endl;
}
int main(){
create();
kruskal();
return 0;
}
/*
4
0 990 1000 5
990 0 179 0
1000 179 0 26
5 0 26 0
2
1 2
4 3
4
0 990 692 5
990 0 5 0
692 5 0 26
5 0 26 0
2
1 2
4 3
4
0 990 692 5
990 0 179 0
692 179 0 26
5 0 26 0
3
1 2
2 3
1 4
3
0 990 692
990 0 179
692 179 0
2
1 2
1 3
*/
还剩一个问题:最小生成树的权值之和如何提前输出
#include<iostream>
#include<string>
using namespace std;
const int Max=20;
const int Mlen=9999;
struct zp{
int k;
int value;
};
struct ma{
int h1;
int h2;
int v;
};
zp mar[Max][Max];
string*str;
int n,len;
void create(){
for(int i=0;i<Max;i++)
for(int j=0;j<Max;j++){
mar[i][j].k=-1;
mar[i][j].value=-1;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
mar[i][j].k=0;
mar[i][j].value=0;
}
str=new string[n];
for(int i=0;i<n;i++){
cin>>str[i];
}
cin>>len;
for(int i=0;i<len;i++){
string s1,s2;
int num;
cin>>s1>>s2>>num;
int z1,z2;
for(int i=0;i<n;i++){
if(str[i]==s1)
z1=i;
if(str[i]==s2)
z2=i;
}
mar[z1][z2].k=1;
mar[z1][z2].value=num;
mar[z2][z1].k=1;
mar[z2][z1].value=num;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<mar[i][j].k;
if(mar[i][j].k==1){
cout<<"("<<mar[i][j].value<<")";
}else{
cout<<" ";
}
//mar[i][j].value;
}
cout<<endl;
}
}
void prim(){
int ans=0;
string u;
cin>>u;
cout<<"prim:"<<endl;
int z;
for(int i=0;i<n;i++){
if(str[i]==u){
z=i;
}
}
ma*line=new ma[len];
for(int i=0;i<len;i++){
if(i!=z&&mar[z][i].k==1){
line[i]={ z,i,mar[z][i].value};
}else{
line[i]={ -1,i,Mlen};
}
}
line[z].v=0;
ma key;
int m=n-1;
while(m--){
int Min=Mlen;
for(int i=0;i<len;i++){
if(line[i].v!=0&&line[i].v<Min){
key=line[i];
Min=key.v;
}
}
cout<<str[key.h1]<<" "<<str[key.h2]<<" "<<key.v<<endl;
z=key.h2;
line[z].v=0;
for(int j=0;j<len;j++){
if(mar[z][j].k==1&&line[j].v!=0){
if(mar[z][j].value<line[j].v){
line[j].h1=z;
line[j].v=mar[z][j].value;
}
}
}
}
}
void kruskal(){
int*visit=new int[n];
for(int i=0;i<n;i++){
visit[i]=-1;
}
cout<<"kruskal:"<<endl;
int Min;
ma*line=new ma[n];
for(int i=0;i<n;i++){
line[i]={-1,-1,Mlen};
}
ma kk;
for(int p=0;p<n-1;p++){
Min=Mlen;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(visit[i]!=-1&&visit[j]!=-1){
if(visit[i]==visit[j]){
continue;
}
}
//判断该边是否可能成环
if(mar[i][j].value>0&&mar[i][j].value<Min){
Min=mar[i][j].value;
//cout<<Min<<" ";
kk.h1=i;
kk.h2=j;
kk.v=Min;
//kk={i,j,mar[i][j].value};
}
}
}
int t1 =kk.h1;
int t2 =kk.h2;
cout<<str[t1]<<" "<<str[t2]<<" "<<kk.v<<endl;
if(visit[t1]!=-1&&visit[t2]==-1){
visit[t2]=visit[t1];
}
if(visit[t2]!=-1&&visit[t1]==-1){
visit[t1]=visit[t2];
}
if(visit[t2]==-1&&visit[t1]==-1){
visit[t1]=t1;
visit[t2]=t1;
}
if(visit[t1]!=-1&&visit[t2]!=-1){
int mm=visit[t2];
for(int f=0;f<n;f++){
if(visit[f]==mm){
visit[f]=visit[t1];
}
}
}
mar[kk.h1][kk.h2].value=0;
mar[kk.h2][kk.h1].value=0;
line[p]=kk;
}
}
int main(){
cin>>n;
create();
prim();
kruskal();
return 0;
}
搞定:
#include<iostream>
#include<string>
using namespace std;
const int Max=20;
const int Mlen=9999;
struct zp{
int k;
int value;
};
struct ma{
int h1;
int h2;
int v;
};
zp mar[Max][Max];
string*str;
int n,len;
string u;
void create(){
for(int i=0;i<Max;i++)
for(int j=0;j<Max;j++){
mar[i][j].k=-1;
mar[i][j].value=-1;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
mar[i][j].k=0;
mar[i][j].value=0;
}
str=new string[n];
for(int i=0;i<n;i++){
cin>>str[i];
}
cin>>len;
for(int i=0;i<len;i++){
string s1,s2;
int num;
cin>>s1>>s2>>num;
int z1,z2;
for(int i=0;i<n;i++){
if(str[i]==s1)
z1=i;
if(str[i]==s2)
z2=i;
}
mar[z1][z2].k=1;
mar[z1][z2].value=num;
mar[z2][z1].k=1;
mar[z2][z1].value=num;
}
}
void ans(){
int ans=0;
cin>>u;
int z;
for(int i=0;i<n;i++){
if(str[i]==u){
z=i;
}
}
ma*line=new ma[len];
for(int i=0;i<len;i++){
if(i!=z&&mar[z][i].k==1){
line[i]={ z,i,mar[z][i].value};
}else{
line[i]={ -1,i,Mlen};
}
}
line[z].v=0;
ma key;
int m=n-1;
while(m--){
int Min=Mlen;
for(int i=0;i<len;i++){
if(line[i].v!=0&&line[i].v<Min){
key=line[i];
Min=key.v;
}
}
ans+=key.v;
//cout<<str[key.h1]<<" "<<str[key.h2]<<" "<<key.v<<endl;
z=key.h2;
line[z].v=0;
for(int j=0;j<len;j++){
if(mar[z][j].k==1&&line[j].v!=0){
if(mar[z][j].value<line[j].v){
line[j].h1=z;
line[j].v=mar[z][j].value;
}
}
}
}
cout<<ans<<endl;
}
void prim(){
int ans=0;
// string u;
//cin>>u;
cout<<"prim:"<<endl;
int z;
for(int i=0;i<n;i++){
if(str[i]==u){
z=i;
}
}
ma*line=new ma[len];
for(int i=0;i<len;i++){
if(i!=z&&mar[z][i].k==1){
line[i]={ z,i,mar[z][i].value};
}else{
line[i]={ -1,i,Mlen};
}
}
line[z].v=0;
ma key;
int m=n-1;
while(m--){
int Min=Mlen;
for(int i=0;i<len;i++){
if(line[i].v!=0&&line[i].v<Min){
key=line[i];
Min=key.v;
}
}
cout<<str[key.h1]<<" "<<str[key.h2]<<" "<<key.v<<endl;
z=key.h2;
line[z].v=0;
for(int j=0;j<len;j++){
if(mar[z][j].k==1&&line[j].v!=0){
if(mar[z][j].value<line[j].v){
line[j].h1=z;
line[j].v=mar[z][j].value;
}
}
}
}
}
void kruskal(){
int*visit=new int[n];
for(int i=0;i<n;i++){
visit[i]=-1;
}
cout<<"kruskal:"<<endl;
int Min;
ma*line=new ma[n];
for(int i=0;i<n;i++){
line[i]={-1,-1,Mlen};
}
ma kk;
for(int p=0;p<n-1;p++){
Min=Mlen;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(visit[i]!=-1&&visit[j]!=-1){
if(visit[i]==visit[j]){
continue;
}
}
//判断该边是否可能成环
if(mar[i][j].value>0&&mar[i][j].value<Min){
Min=mar[i][j].value;
//cout<<Min<<" ";
kk.h1=i;
kk.h2=j;
kk.v=Min;
//kk={i,j,mar[i][j].value};
}
}
}
int t1 =kk.h1;
int t2 =kk.h2;
cout<<str[t1]<<" "<<str[t2]<<" "<<kk.v<<endl;
if(visit[t1]!=-1&&visit[t2]==-1){
visit[t2]=visit[t1];
}
if(visit[t2]!=-1&&visit[t1]==-1){
visit[t1]=visit[t2];
}
if(visit[t2]==-1&&visit[t1]==-1){
visit[t1]=t1;
visit[t2]=t1;
}
if(visit[t1]!=-1&&visit[t2]!=-1){
int mm=visit[t2];
for(int f=0;f<n;f++){
if(visit[f]==mm){
visit[f]=visit[t1];
}
}
}
mar[kk.h1][kk.h2].value=0;
mar[kk.h2][kk.h1].value=0;
line[p]=kk;
}
}
int main(){
cin>>n;
create();
ans();
prim();
kruskal();
return 0;
}
正确,最终版:
#include<iostream>
#include<string>
using namespace std;
const int Max=20;
const int Mlen=9999;
struct zp{
int k;
int value;
};
struct ma{
int h1;
int h2;
int v;
};
zp mar[Max][Max];
string*str;
int n,len;
string u;
void create(){
for(int i=0;i<Max;i++)
for(int j=0;j<Max;j++){
mar[i][j].k=-1;
mar[i][j].value=-1;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
mar[i][j].k=0;
mar[i][j].value=0;
}
str=new string[n];
for(int i=0;i<n;i++){
cin>>str[i];
}
cin>>len;
for(int i=0;i<len;i++){
string s1,s2;
int num;
cin>>s1>>s2>>num;
int z1,z2;
for(int i=0;i<n;i++){
if(str[i]==s1)
z1=i;
if(str[i]==s2)
z2=i;
}
mar[z1][z2].k=1;
mar[z1][z2].value=num;
mar[z2][z1].k=1;
mar[z2][z1].value=num;
}
}
void ans(){
int ans=0;
cin>>u;
int z;
for(int i=0;i<n;i++){
if(str[i]==u){
z=i;
}
}
ma*line=new ma[len];
for(int i=0;i<len;i++){
if(i!=z&&mar[z][i].k==1){
line[i]={ z,i,mar[z][i].value};
}else{
line[i]={ -1,i,Mlen};
}
}
line[z].v=0;
ma key;
int m=n-1;
while(m--){
int Min=Mlen;
for(int i=0;i<len;i++){
if(line[i].v!=0&&line[i].v<Min){
key=line[i];
Min=key.v;
}
}
ans+=key.v;
z=key.h2;
line[z].v=0;
for(int j=0;j<len;j++){
if(mar[z][j].k==1&&line[j].v!=0){
if(mar[z][j].value<line[j].v){
line[j].h1=z;
line[j].v=mar[z][j].value;
}
}
}
}
cout<<ans<<endl;
}
void prim(){
int ans=0;
// string u;
//cin>>u;
cout<<"prim:"<<endl;
int z;
for(int i=0;i<n;i++){
if(str[i]==u){
z=i;
}
}
ma*line=new ma[len];
for(int i=0;i<len;i++){
if(i!=z&&mar[z][i].k==1){
line[i]={ z,i,mar[z][i].value};
}else{
line[i]={ -1,i,Mlen};
}
}
line[z].v=0;
ma key;
int m=n-1;
while(m--){
int Min=Mlen;
for(int i=0;i<len;i++){
if(line[i].v!=0&&line[i].v<Min){
key=line[i];
Min=key.v;
}
}
cout<<str[key.h1]<<" "<<str[key.h2]<<" "<<key.v<<endl;
z=key.h2;
line[z].v=0;
for(int j=0;j<len;j++){
if(mar[z][j].k==1&&line[j].v!=0){
if(mar[z][j].value<line[j].v){
line[j].h1=z;
line[j].v=mar[z][j].value;
}
}
}
}
}
void kruskal(){
int*visit=new int[n];
for(int i=0;i<n;i++){
visit[i]=-1;
}
cout<<"kruskal:"<<endl;
int Min;
ma*line=new ma[n];
for(int i=0;i<n;i++){
line[i]={-1,-1,Mlen};
}
ma kk;
for(int p=0;p<n-1;p++){
Min=Mlen;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(visit[i]!=-1&&visit[j]!=-1){
if(visit[i]==visit[j]){
continue;
}
}
if(mar[i][j].value>0&&mar[i][j].value<Min){
Min=mar[i][j].value;
kk.h1=i;
kk.h2=j;
kk.v=Min;
}
}
}
int t1 =kk.h1;
int t2 =kk.h2;
cout<<str[t1]<<" "<<str[t2]<<" "<<kk.v<<endl;
if(visit[t1]!=-1&&visit[t2]==-1){
visit[t2]=visit[t1];
}
if(visit[t2]!=-1&&visit[t1]==-1){
visit[t1]=visit[t2];
}
if(visit[t2]==-1&&visit[t1]==-1){
visit[t1]=t1;
visit[t2]=t1;
}
if(visit[t1]!=-1&&visit[t2]!=-1){
int mm=visit[t2];
for(int f=0;f<n;f++){
if(visit[f]==mm){
visit[f]=visit[t1];
}
}
}
mar[kk.h1][kk.h2].value=0;
mar[kk.h2][kk.h1].value=0;
line[p]=kk;
}
}
int main(){
cin>>n;
create();
ans();
prim();
kruskal();
return 0;
}
第二题,还不错
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
const int Maxn=100;
int mar[Maxn][Maxn];
struct ma{
int k=0;//错误: ISO C ++禁止非const静态成员'k'的类内初始化
int x;
int y;
};
double ans(int x1,int y1,int x2,int y2){
double b;
b=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
return b;
}
void BFS(int m, int n, int Ma[Maxn][Maxn], bool*visit,int*findt) {
queue<int>q;
q.push(m);
while (!q.empty()) {
int v = q.front();
if (visit[v] != true) {
cout << v << " ";
findt[v]=1;
visit[v] = true;
}
q.pop();
for (int i = 0; i < n; i++) {
if (Ma[v][i] == 1 && visit[i] != true) {
visit[i] = true;
cout << i << " ";
findt[i]=1;
q.push(i);
}
}
}
}
int main(){
int n,d;
cin>>n>>d;
ma*st=new ma[n];
for(int i=0;i<n;i++){
cin>>st[i].x>>st[i].y;
}
char k;
for(int i=0;i<Maxn;i++){
for(int j=0;j<Maxn;j++){
mar[i][j]=-1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
mar[i][j]=0;
}
}
while(cin>>k){
if(k=='O'){
int num;
cin>>num;
int z=num-1;
st[z].k=1;
for(int i=0;i<n;i++){
if(i==z)
continue;
if(st[i].k==1){
double an=ans(st[z].x,st[z].y,st[i].x,st[i].y);
if(an<=d){
mar[z][i]=1;
mar[i][z]=1;
}
}
}
}
if(k=='S'){
int u1,u2;
cin>>u1>>u2;
int t1,t2;
t1=u1-1;
t2=u2-1;
bool*visit = new bool[n];
int*findt=new int[n];
for (int i = 0; i < n; i++) {
visit[i] = false;
findt[i]=-0;
}
BFS(t1,n,mar,visit,findt);
cout<<endl;
if(findt[t2]==1){
cout<<"SUCCESS"<<endl;
}else{
cout<<"FAIL"<<endl;
}
}
}
return 0;
}
这次没有问题了,非静态不要在结构体内初始化
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
const int Maxn=100;
int mar[Maxn][Maxn];
struct ma{
int k;
int x;
int y;
};
double ans(int x1,int y1,int x2,int y2){
double b;
b=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
return b;
}
void BFS(int m, int n, int Ma[Maxn][Maxn], bool*visit,int*findt) {
queue<int>q;
q.push(m);
while (!q.empty()) {
int v = q.front();
if (visit[v] != true) {
findt[v]=1;
visit[v] = true;
}
q.pop();
for (int i = 0; i < n; i++) {
if (Ma[v][i] == 1 && visit[i] != true) {
visit[i] = true;
findt[i]=1;
q.push(i);
}
}
}
}
int main(){
int n,d;
cin>>n>>d;
ma*st=new ma[n];
for(int i=0;i<n;i++){
st[i].k=0;
cin>>st[i].x>>st[i].y;
}
char k;
for(int i=0;i<Maxn;i++){
for(int j=0;j<Maxn;j++){
mar[i][j]=-1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
mar[i][j]=0;
}
}
while(cin>>k){
if(k=='O'){
int num;
cin>>num;
int z=num-1;
st[z].k=1;
for(int i=0;i<n;i++){
if(i==z)
continue;
if(st[i].k==1){
double an=ans(st[z].x,st[z].y,st[i].x,st[i].y);
if(an<=d){
mar[z][i]=1;
mar[i][z]=1;
}
}
}
}
if(k=='S'){
int u1,u2;
cin>>u1>>u2;
int t1,t2;
t1=u1-1;
t2=u2-1;
bool*visit = new bool[n];
int*findt=new int[n];
for (int i = 0; i < n; i++) {
visit[i] = false;
findt[i]=-0;
}
BFS(t1,n,mar,visit,findt);
if(findt[t2]==1){
cout<<"SUCCESS"<<endl;
}else{
cout<<"FAIL"<<endl;
}
}
}
return 0;
}
第三题感觉没什么问题,但就是过不了,错误50%
#include<iostream>
using namespace std;
const int Max=100;
const int Mlen=1000;
int n;
int q;
struct zp{
int k;
int value;
};
struct ma {
int h1;
int h2;
int v;
};
zp mar[Max][Max];
void create(){
cin>>n;
for(int i=0;i<Max;i++){
for(int j=0;j<Max;j++){
mar[i][j].k=-1;
mar[i][j].value=-1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>mar[i][j].value;
mar[i][j].k=0;
}
}
cin>>q;
for(int i=0;i<q;i++){
int m1,m2;
cin>>m1>>m2;
int t1=m1-1;
int t2=m2-1;
mar[t1][t2].k=1;
mar[t2][t1].k=1;
}
}
void kruskal() {
int ans=0;
int*visit = new int[n];
for (int i = 0; i<n; i++) {
visit[i] = -1;
}
int Min;
ma*line = new ma[n];
for (int i = 0; i<n; i++) {
line[i] = { -1,-1,Mlen };
}
ma kk;
for (int p = 0; p<n -q- 1; p++) {
Min = Mlen;
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
if (visit[i] != -1 && visit[j] != -1) {
if (visit[i] == visit[j]) {
continue;
}
}
if (mar[i][j].value>0 && mar[i][j].value<Min) {
Min = mar[i][j].value;
kk.h1 = i;
kk.h2 = j;
kk.v = Min;
}
}
}
int t1 = kk.h1;
int t2 = kk.h2;
ans+=kk.v;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
mar[kk.h1][kk.h2].value = 0;
mar[kk.h2][kk.h1].value = 0;
line[p] = kk;
}
cout<<ans<<endl;
}
int main(){
create();
kruskal();
return 0;
}
/*
4
0 990 692 5
990 0 179 0
692 179 0 26
5 0 26 0
1
1 2
4
0 990 692 5
990 0 179 0
692 179 0 26
5 0 26 0
2
1 2
2 3
4
0 990 692 5
990 0 179 0
692 179 0 26
5 0 26 0
3
1 2
2 3
1 4
*/
0%
不知道哪里错了
#include<iostream>
using namespace std;
const int Max=100;
const int Mlen=1000;
int n;
int q;
struct ma {
int h1;
int h2;
int v;
};
int mar[Max][Max];
int*visit;
void create(){
cin>>n;
for(int i=0;i<Max;i++){
for(int j=0;j<Max;j++){
mar[i][j]=-1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>mar[i][j];
}
}
visit= new int[n];
for (int i = 0; i<n; i++) {
visit[i] = -1;
}
cin>>q;
for(int i=0;i<q;i++){
int m1,m2;
cin>>m1>>m2;
int t1=m1-1;
int t2=m2-1;
mar[t1][t2]=0;
mar[t2][t1]=0;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
}
}
void kruskal() {
int ans=0;
int Min;
ma kk;
for (int p = 0; p<n -q- 1; p++) {
Min = Mlen;
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
if (visit[i] != -1 && visit[j] != -1) {
if (visit[i] == visit[j]) {
continue;
}
}
if (mar[i][j]>0 && mar[i][j]<Min) {
Min = mar[i][j];
kk.h1 = i;
kk.h2 = j;
kk.v = Min;
}
}
}
int t1 = kk.h1;
int t2 = kk.h2;
ans+=kk.v;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
mar[kk.h1][kk.h2] = 0;
mar[kk.h2][kk.h1] = 0;
}
cout<<ans<<endl;
}
int main(){
create();
kruskal();
return 0;
}
/*
4
0 990 1000 5
990 0 179 0
1000 179 0 26
5 0 26 0
2
1 2
4 3
4
0 990 692 5
990 0 5 0
692 5 0 26
5 0 26 0
2
1 2
4 3
4
0 990 692 5
990 0 179 0
692 179 0 26
5 0 26 0
3
1 2
2 3
1 4
3
0 990 692
990 0 179
692 179 0
2
1 2
1 3
*/
错误:Run-Time Check Failure #3 - The variable 'kk' is being used without being initialized.
#include<iostream>
using namespace std;
const int Max = 100;
const int Mlen = 1000;
int n;
int q;
struct ma {
int h1;
int h2;
int v;
};
int mar[Max][Max];
int*visit;
void create() {
cin >> n;
for (int i = 0; i<Max; i++) {
for (int j = 0; j<Max; j++) {
mar[i][j] = -1;
}
}
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
cin >> mar[i][j];
}
}
visit = new int[n];
for (int i = 0; i<n; i++) {
visit[i] = -1;
}
cin >> q;
for (int i = 0; i<q; i++) {
int m1, m2;
cin >> m1 >> m2;
int t1 = m1 - 1;
int t2 = m2 - 1;
mar[t1][t2] = 0;
mar[t2][t1] = 0;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
}
}
void kruskal() {
int ans = 0;
int Min;
ma kk;
int zz = 0;
for (int i = 0; i<n; i++) {
if (visit[i] == -1) {
zz = 1;
}
}
while (zz) {
Min = Mlen;
for (int i = 0; i<n; i++) {
for (int j = 0; j<n; j++) {
if (visit[i] != -1 && visit[j] != -1) {
if (visit[i] == visit[j]) {
continue;
}
}
if (mar[i][j]>0 && mar[i][j]<Min) {
Min = mar[i][j];
kk.h1 = i;
kk.h2 = j;
kk.v = Min;
}
}
}
int t1 = kk.h1;
int t2 = kk.h2;
ans += kk.v;
if (visit[t1] != -1 && visit[t2] == -1) {
visit[t2] = visit[t1];
}
if (visit[t2] != -1 && visit[t1] == -1) {
visit[t1] = visit[t2];
}
if (visit[t2] == -1 && visit[t1] == -1) {
visit[t1] = t1;
visit[t2] = t1;
}
if (visit[t1] != -1 && visit[t2] != -1) {
int mm = visit[t2];
for (int f = 0; f<n; f++) {
if (visit[f] == mm) {
visit[f] = visit[t1];
}
}
}
mar[kk.h1][kk.h2] = 0;
mar[kk.h2][kk.h1] = 0;
int zzz = 0;
for (int i = 0; i<n; i++) {
if (visit[i] == -1) {
zzz = 1;
}
}
if (zzz == 0) {
break;
}
}
cout << ans << endl;
}
int main() {
create();
kruskal();
return 0;
}
还是不过???????什么问题啊怎么这么迷